zoukankan      html  css  js  c++  java
  • (实战)创建SelectedItems处理方法

    1、in dir/msg/bbkmsg.met file, define as:
       define class message NewReport like SelectedItemSetMsg;
     
    2、in dir/src/pdmitem.met file, define as:
       attach class message NewReport to PdmItem in server bbksvr;
    3、in dir/src/pdmitemb.met file, define as:
       define option bbkNewReportOpt using message NewReport;
       display bbkNewReportOpt as "Write Report File";
       attach option bbkNewReportOpt to OmfPdoInfReportsOptL;
     
    4、write the method code at dir/src/pdmitem.mth file:
    注意 osExecuteAsync的参数如何组织!
     
    class message PdmItem:NewReport(...)
    {
       char *mod_name = "PdmItem:NewReport";
       status dstat = OKAY;
       char* a_home = NULL;
       char* a_hometemp = NULL;
       char* a_date = NULL;
       char* a_datetemp = NULL;
       char* outfile_name = NULL;
       char *a_type = NULL;
       char *a_dtype = NULL;
       FILE *file = NULL;
       MetaPtr dftMeta = NULL;
       ObjectPtr item = NULL;
       string itemClass = NULL;
       SetOfStrings itemAttrs = NULL;
       string attrName = NULL;
       string attrPrompt = NULL;
       string attrValue  = NULL;
       int size, i;
       int aSize, ia;
       string argv[3];
       *mfail = USC_OKAY;
     
    // get name of directory from environment variable HOME
    // make a local copy in memory
     
       a_hometemp = osGetenv(NULL, NULL, "HOME");
       if (a_hometemp == NULL) goto EXIT;
       a_home = nlsStrDup(a_hometemp);
       if (a_home == NULL) goto EXIT;
     
    // get system date for creating report file
    // make a local copy in memory
     
       a_datetemp = sysGetDate();
       if (a_datetemp == NULL) goto EXIT;
       a_date = nlsStrDup(a_datetemp);
       if (a_date == NULL) goto EXIT;
     
    // create output file full path
     
    // allocate string to contain complete path
       outfile_name = nlsStrAlloc(nlsStrLen(a_home) + 5 + nlsStrLen(a_date) + 5);
       outfile_name = nlsStrCpy(outfile_name, a_home);
       outfile_name = nlsStrCat(outfile_name, "
    \\rep_");  // NT
    //  outfile_name = nlsStrCat(outfile_name, "/rep_");  // UNIX
       outfile_name = nlsStrCat(outfile_name, a_date);
       outfile_name = nlsStrCat(outfile_name, ".txt");
     
    // open the output file
       if ((file = sysFopen(outfile_name,"w")) == NULL)
       {
          goto EXIT;
       }
     
    // get the meta data using oiMetaGetDefaultMeta
       if (dstat = oiMetaGetDefaultMeta(&dftMeta))
       {
          goto EXIT;
       }
     
    // get the number of items selected using low_set_size
       size = low_set_size(SelectedItems);
     
    // loop through each of the selected items
       for (i=0; i<size; i++)
       {
     
          /* get one of the items using low_set_get */
          item = (ObjectPtr)low_set_get(SelectedItems, i);
     
          /* get the class name of the item using objGetClass */
          if (dstat = objGetClass(item, &itemClass))
          {
              goto EXIT;
          }
     
          /* get all attributes for that class using metaGetAllClassAttributes */
          if (dstat = metaGetAllClassAttributes(dftMeta, itemClass, &itemAttrs))
          {
              goto EXIT;
          }
     
          /* count the number of attributes using low_set_size */
          aSize = low_set_size(itemAttrs);
     
          /* loop through each of the attributes */
          for (ia = 0; ia < aSize; ia++)
          {
      /* get one of the attributes using low_set_get */
             attrName = (string)low_set_get(itemAttrs, ia);
     
      /* get displayed name for the attribute using metaGetPromptFromTag */
             if (dstat = metaGetPromptFromTag(dftMeta, attrName, &attrPrompt))
             {
                 goto EXIT;
             }
     
      /* get attribute type using metaGetAttributeTypes       */
      /* variables type a_type and a_dtype are declared above */
             if (dstat = metaGetAttributeTypes(dftMeta, attrName, &a_type, &a_dtype))
             {
                 goto EXIT;
             }
     
      /* if I can handle this attribute type */
      if (nlsStrCmp(a_type, a_dtype))
      {
        /* get value for attribute */
               if(dstat = objGetAttribute(item, attrName, &attrValue))
               {
                   goto EXIT;
               }
     
               /* print attribute name and value */
               if(attrValue != NULL) fprintf (file," Attribute:%s  ,Value:%s\n", attrPrompt, attrValue);
      }
          }  /* end for each attribute */
          fprintf (file,"\n===== End of Object =====\n");
       }    /* end for each select item */
     
       fprintf(file,"\n----------------\nEnd of Report\n---------------\n");
       fclose (file);
      
       /*********************************************/
       /*  Advanced Exercises                       */
       argv[0] = "notepad";
       argv[1] = outfile_name;
       argv[2] = NULL;
       osExecuteAsync(NULL, NULL, "notepad", argv);
       /*  End of Advanced Exercises                */
      
    CLEANUP:
     
    EXIT:
       if (dstat != OKAY)
          uiShowFatalError(dstat, WHERE);
       return (dstat);
    }
  • 相关阅读:
    Mayan游戏 (codevs 1136)题解
    虫食算 (codevs 1064)题解
    靶形数独 (codevs 1174)题解
    黑白棋游戏 (codevs 2743)题解
    神经网络 (codevs 1088) 题解
    The Rotation Game (POJ 2286) 题解
    倒水问题 (codevs 1226) 题解
    银河英雄传说 (codevs 1540) 题解
    生日蛋糕 (codevs 1710) 题解
    第一章 1.11 高阶函数
  • 原文地址:https://www.cnblogs.com/hcfalan/p/422510.html
Copyright © 2011-2022 走看看