Thursday 29 December 2016

Teamcenter ITK : Exapnd BOM with Revision Rule

Problem Statement :Print BOM recursively using BOM APIs
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "unidefs.h"
#include "mem.h"
#include "tc.h"
#include "tcfile.h"
#include "item.h"
#include "bom.h"
#include "cfm.h"
#include "workspaceobject.h"
#include "tc_string.h"
#include "tcfile.h"
#include "emh.h"
#include "tctype.h"

static void printrecursivebom (tag_t line,tag_t Parent, int depth,char *req_item);
extern int ITK_user_main( int argc, char **argv )
{
        char *Item_ID = ITK_ask_cli_argument("-Item_ID=");
 char **values = (char **) MEM_alloc(1 * sizeof(char *));
 char **attrs = (char **) MEM_alloc(1 * sizeof(char *));

 int ifail;
 int n_tags_found=0;

 tag_t item_tag=null_tag; 
 tag_t window=null_tag; 
 tag_t rule=null_tag; 
 tag_t top_line=null_tag;
 tag_t *tags_found = NULL;

       ifail =ITK_auto_login( );

  if(ifail==ITK_ok)
 {
   printf("\n\n\t Successfully Logged in With INFODBA");
 }
 else
 {
  printf("\n\n\t Login Failed");
 }
 values[0] = (char *)Item_ID;
 attrs[0] ="item_id";  

 ITEM_find_items_by_key_attributes(1,attrs,values, &n_tags_found, &tags_found); //Searching Item tag in Database
       printf("\n\n\tn_tags_found are  --->%d",n_tags_found);

 item_tag = tags_found[0]; //storing Item Tag in item_tag datatype
 MEM_free(tags_found);

 BOM_create_window (&window);  
 CFM_find( "Latest Working", &rule ); //Find Revision Rule 
 BOM_set_window_config_rule( window, rule );//Set Revision Rule 

//Sets a flag to say whether BOM lines are packed by default. By default 
all BOM lines are reported. //If this function is called to set the 
default packing true, then packable lines will be reported as one //BOM 
line.
 BOM_set_window_pack_all (window, true);

 BOM_set_window_top_line (window, item_tag, null_tag, null_tag, &top_line);

 printrecursivebom(top_line,NULLTAG,0,Item_ID);  

return ITK_ok;
}
static void printrecursivebom(tag_t line,tag_t Parent, int depth,char *req_item)
  {
 int n=0;
 int k=0;
 int *   attribute;

 tag_t  *children ;
 tag_t    value;
 
 char    a_name[WSO_name_size_c+1];

 depth ++;

        printf("\n\n\t\t Calling Recursive function to get childrens of Parent Assembly\n");   

  BOM_line_ask_child_lines (line, &n, &children);  
  printf("\n No:of Child Parts are -------->%d\n",n);
  printf("\nDepth value is -------->%d\n",depth);

  for (k = 0; k < n; k++)
  {
  //get the revision from bomline
                BOM_line_look_up_attribute  (  "bl_revision", &attribute  );
                BOM_line_ask_attribute_tag  (  children[k], attribute, &value  );
  WSOM_ask_name  (  value,  a_name);
  printf("\n\n\n ChildName is  :: %s\n",a_name); 
  printf("\n K value is -------->%d\n",k);


  printrecursivebom (children[k],line,depth,req_item);
 }
 printf("\n After Depth value is -------->%d\n",depth);
  }
Explanation : Important API 
ITEM_find_items_by_key_attributes(1,attrs,values, &n_tags_found, &tags_found); 
BOM_create_window (&window); 
CFM_find( "Latest Working", &rule );
BOM_set_window_config_rule( window, rule ); 

BOM_set_window_pack_all (window, true); 
BOM_set_window_top_line (window, item_tag, null_tag, null_tag, &top_line); 
BOM_line_ask_child_lines (line, &n, &children); BOM_line_look_up_attribute ( "bl_revision", &attribute ); BOM_line_ask_attribute_tag ( children[k], attribute, &value ); WSOM_ask_name ( value, a_name);

3 comments:

  1. Sir can you explain all settings of itk in detail why we do that settings there purpose n all.

    ReplyDelete
  2. Thank you very much Anil for taking time to give us fine details about RAC customization

    ReplyDelete