You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
293 lines
15 KiB
293 lines
15 KiB
/*
|
|
Copyright 2020 Siemens Digital Industries Software
|
|
==================================================
|
|
Copyright 2020.
|
|
Siemens Product Lifecycle Management Software Inc.
|
|
All Rights Reserved.
|
|
==================================================
|
|
Copyright 2020 Siemens Digital Industries Software
|
|
*/
|
|
|
|
/**
|
|
@file
|
|
|
|
Contains declarations of the publish APIs of Product Master Automation.
|
|
*/
|
|
|
|
#ifndef PMA0_AUTOMATION_H
|
|
#define PMA0_AUTOMATION_H
|
|
|
|
#include <unidefs.h>
|
|
|
|
#include <Pma0automation/libpma0automation_exports.h>
|
|
|
|
/**
|
|
@defgroup PMA0AUTOMATION Product Master Automation
|
|
<br/>This module contains the declaration of APIs used during generation/updation of Engineering BOM from Design BOM and vice-versa.
|
|
<br/>The term "Source" refers to the input structure and "Target" refers to the output structure.
|
|
<br/>ex. For generating Engineerig BOM from a Design BOM, Design BOM is the source structure and Engineering BOM is the target structure.
|
|
|
|
<br/>This process involves creating target items and target structure.
|
|
<br/>While generating a target Item corresponding to a source Item, Find or Create of target item is performed.
|
|
<ul>
|
|
<li>If the target item is found, the same is used n the target structure
|
|
<li>If the target item is NOT found, a new target item is created.
|
|
</ul>
|
|
<br/>The OOTB find logic is based on Part Design alignment
|
|
<br/>The OOTB create logic uses the prefix/suffix specified in the preferences @c Pma0_EBOM_Prefix_Suffix
|
|
<br/>and @c Pma0_DBOM_Prefix_Suffix to set @c item_id, @c object_name properties on target Item CreateInput.
|
|
<br/>In addition, @c object_desc property is copied on the target Item CreateInput.
|
|
<br/>
|
|
<br/>The above OOTB Find or create logic is customizable using following 2 User Exits.
|
|
<ul>
|
|
<li>@c BMF_Pma0_find_target_items_for_sources -
|
|
<br/>User Exit for customizing the target Item Find behavior.
|
|
<li>@c BMF_Pma0_populate_target_item_creI_for_sources -
|
|
<br/>User Exit for customizing the target Item Create behavior.
|
|
</ul>
|
|
<br/>These User Exits are invoked from both the ITKs - #PMA0_generate_engineering_bom, #PMA0_generate_design_bom.
|
|
<br/>
|
|
<br/>For more details about Find or Create customization follow the below documentation.
|
|
|
|
<br/><b>Find:</b>
|
|
<ul>
|
|
<li>When this User Exit is not overridden, system finds the target ITEMs based on Part-Design alignment.
|
|
<li>This User Exit should be overridden for custom ITEM types when an existing ITEM need to be re-used using business logic other than Part-Design alignment.
|
|
|
|
@note To override the User Exit, attach the extension to BO operation BMF_Pma0_find_target_items_for_sources on source Item.
|
|
The arguments of the extension should exactly match the arguments of this User Exit.
|
|
|
|
<li>The output map should contain only the valid target ITEMs found against sources. Sources for which target is NOT found should NOT be returned in output map.
|
|
</ul>
|
|
|
|
@code
|
|
int CustomPartType::Custom_find_parts( METHOD_message_t *, va_list args )
|
|
{
|
|
int iFail = ITK_ok;
|
|
try
|
|
{
|
|
va_list largs;
|
|
va_copy(largs, args);
|
|
|
|
const tag_t pSrcDesignType = static_cast<const tag_t>(va_arg(largs, void *));
|
|
|
|
//In this example, we want the custom find logic to be executed for Designs of type "CustomDesign"
|
|
scoped_smptr<char> srcDesignTypeName;
|
|
rs = TCTYPE_ask_name2(pSrcDesignType, &srcDesignTypeName);
|
|
if (std::string(srcDesignTypeName.getString()) != "CustomDesign")
|
|
{
|
|
//Following error must be added to error stack and returned,
|
|
//when we do not want to proceed with the custom logic.
|
|
int ifail = PMA0AUTOMATION_user_exit_skip_execution;
|
|
ERROR_store(ERROR_severity_error, ifail);
|
|
return ifail;
|
|
}
|
|
|
|
const std::vector<tag_t> * pSrcDesignLines = static_cast<const std::vector<tag_t>*>( va_arg( largs, void * ) );
|
|
std::map<tag_t, tag_t > * pSrcDsgnLineToFoundPart = static_cast<std::map<tag_t, tag_t> *>( va_arg( largs, void * ) );
|
|
va_end( largs );
|
|
for( auto srcLine : *pSrcDesignLines )
|
|
{
|
|
tag_t foundPart = NULLTAG;
|
|
//Custom find logic based on srcLine
|
|
if( found )
|
|
{
|
|
( *pSrcDsgnLineToFoundPart ).insert( { srcLine,foundPart } );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@endcode
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<br/><b>Create:</b>
|
|
<ul>
|
|
<li>When the User Exit is not overridden, system creates the target ITEMs using default createInput.
|
|
<li>This User Exit should be overridden for custom ITEM types when the custom ITEM type has mandatory properties to be populated from @p source_lines.
|
|
|
|
@note To override the User Exit, attach the extension to BO operation BMF_Pma0_find_target_items_for_sources on source Item.
|
|
The arguments of the extension should exactly match the arguments of this User Exit.
|
|
|
|
<li>The output map contains the target item createInputs against sources. All the input sources should have a corresponding target createInput.
|
|
</ul>
|
|
@code
|
|
int CustomPartType::Custom_populate_creI_for_parts( METHOD_message_t *, va_list args )
|
|
{
|
|
int iFail = ITK_ok;
|
|
try
|
|
{
|
|
va_list largs;
|
|
va_copy( largs, args );
|
|
|
|
const tag_t pSrcDesignType = static_cast<const tag_t>(va_arg(largs, void *));
|
|
|
|
//In this example, we want the custom find logic to be executed for Designs of type "CustomDesign"
|
|
scoped_smptr<char> srcDesignTypeName;
|
|
rs = TCTYPE_ask_name2(pSrcDesignType, &srcDesignTypeName);
|
|
if (std::string(srcDesignTypeName.getString()) != "CustomDesign")
|
|
{
|
|
//Following error must be added to error stack and returned,
|
|
//when we do not want to proceed with the custom logic.
|
|
int ifail = PMA0AUTOMATION_user_exit_skip_execution;
|
|
ERROR_store(ERROR_severity_error, ifail);
|
|
return ifail;
|
|
}
|
|
const std::vector<tag_t> * pSrcDesignLines = static_cast<const std::vector<tag_t>*>( va_arg( largs, void * ) );
|
|
std::map<tag_t, tag_t > * pSrcDsgnLineToPartCreI = static_cast<std::map<tag_t, tag_t> *>( va_arg( largs, void * ) );
|
|
va_end( largs );
|
|
for( auto srcLine : *pSrcDesignLines )
|
|
{
|
|
tag_t partCreInput = NULLTAG;
|
|
//populate createInput of the target type for mandatory properties to be derived from srcLine
|
|
( *pSrcDsgnLineToPartCreI ).insert( { srcLine,partCreInput } );
|
|
}
|
|
}
|
|
}
|
|
@endcode
|
|
@{
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
/**
|
|
Generates an Engineering BOM structure corresponding to the input design sources.
|
|
@note The following preferences must be appropriately set prior to calling this ITK:
|
|
<ul>
|
|
<li>@c Pma0_EBOM_Prefix_Suffix
|
|
<li>@c Pma0_DBOM_skip_node_conditions
|
|
<li>@c Pma0_DBOM_skip_occurrence_conditions
|
|
<li>@c Pma0_Part_Design_Type
|
|
<li>@c Pma0_EBOMRoot_DBOMRoot_Type
|
|
<li>@c Pma0_ChildItemType_RevOccType
|
|
</ul>
|
|
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success.
|
|
<li>#PF_INVALID if value provided for the preference @c Pma0_EBOM_Prefix_Suffix, @c Pma0_EBOM_skip_node_conditions, @c Pma0_DBOM_skip_occurrence_conditions, @c Pma0_Part_Design_Type, @c Pma0_EBOMRoot_DBOMRoot_Type, @c Pma0_ChildItemType_RevOccType is invalid.
|
|
<li>#PMA0AUTOMATION_input_root_skipped if the Engineering BOM structure cannot be generated for the input @p dbom_source, because it is configured to be skipped (through preference @c Pma0_skip_node_conditions) and it does not contain any unskipped parent.
|
|
<li>#PMA0AUTOMATION_invalid_part_or_design if the Part object for source object Design @p dbom_sources was not created because it is not a valid type. The supported type is Design.
|
|
<li>#PMA0AUTOMATION_no_item_rev if the Engineering BOM top line is unconfigured.
|
|
<li>#AOM_inst_read_protected if there is no read access or revision not configured on topline
|
|
<li>#AOM_inst_write_protected if current logged in user have no write access on target BOM Line in drag drop.
|
|
<li>#PMA0AUTOMATION_nodes_not_processed if the engineering node creation fails or if the engineering node and design node linking/alignment fails.
|
|
<li>#PMA0AUTOMATION_invalid_source_selection if the root design node is drag-dropped which is a representation of product.
|
|
<li>#PMA0AUTOMATION_target_node_skipped if the root target node is configured to be skipped.
|
|
</ul>
|
|
*/
|
|
extern PMA0AUTOMATION_API int PMA0_generate_engineering_bom(
|
|
tag_t dbom_source, /**< (I) Design BOM source BOMLine */
|
|
logical is_part_ebom, /**< (I) Specifies whether to create a Engineering BOM root item as part or product. It is required when @p ebom_target is #NULLTAG. */
|
|
tag_t* ebom_target /**< (O)Top line of the generated engineering BOM.*/
|
|
);
|
|
|
|
/**
|
|
Generates a Design BOM structure corresponding to the input part sources.
|
|
@note The following preferences must be appropriately set prior to calling this ITK:
|
|
<ul>
|
|
<li>@c Pma0_DBOM_Prefix_Suffix
|
|
<li>@c Pma0_EBOM_skip_node_conditions
|
|
<li>@c Pma0_EBOM_skip_occurrence_conditions
|
|
<li>@c Pma0_Part_Design_Type
|
|
<li>@c Pma0_EBOMRoot_DBOMRoot_Type
|
|
</ul>
|
|
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success.
|
|
<li>#PF_INVALID if value provided for the preference @c Pma0_DBOM_Prefix_Suffix, @c Pma0_DBOM_skip_node_conditions, @c Pma0_EBOM_skip_occurrence_conditions, @c Pma0_Part_Design_Type, @c Pma0_EBOMRoot_DBOMRoot_Type, @c Pma0_ChildItemType_RevOccType is invalid.
|
|
<li>#PMA0AUTOMATION_input_root_skipped if the Design BOM structure cannot be generated for the input @p ebom_source, because it is configured to be skipped (through preference @c Pma0_skip_node_conditions) and it does not contain any unskipped parent.
|
|
<li>#PMA0AUTOMATION_invalid_part_or_design if the Design object for source object Part was not created because it is not a valid type. The supported type is Part.
|
|
<li>#PMA0AUTOMATION_no_item_rev if the Design BOM top line is unconfigured.
|
|
<li>#AOM_inst_read_protected if there is no read access or revision not configured on topline
|
|
<li>#AOM_inst_write_protected if current logged in user have no write access on target BOM Line in drag drop.
|
|
<li>#PMA0AUTOMATION_nodes_not_processed if the design node creation fails or if the engineering node and design node linking/alignment fails.
|
|
<li>#PMA0AUTOMATION_invalid_source_selection if the product is drag-dropped on a design node.
|
|
<li>#PMA0AUTOMATION_target_node_skipped if the root target node is configured to be skipped.
|
|
</ul>
|
|
*/
|
|
extern PMA0AUTOMATION_API int PMA0_generate_design_bom(
|
|
tag_t ebom_source, /**< (I) Engineering BOM source BOMLine */
|
|
tag_t* dbom_target /**< (O)Top line of the generated design BOM.*/
|
|
);
|
|
|
|
/**
|
|
Updates the engineering BOM structure linked to the design BOM structure starting from a given design top line.
|
|
<br/>The engineering structure is updated as per the default action specified on the design BOMLine property @c pma0UpdateAction.
|
|
@note The following preferences must be appropriately set prior to calling this ITK:
|
|
<ul>
|
|
<li>@c Pma0_EBOM_Prefix_Suffix
|
|
<li>@c Pma0_DBOM_skip_node_conditions
|
|
<li>@c Pma0_DBOM_skip_occurrence_conditions
|
|
<li>@c Pma0_Part_Design_Type
|
|
<li>@c Pma0_EBOMRoot_DBOMRoot_Type
|
|
<li>@c Pma0_ChildItemType_RevOccType
|
|
</ul>
|
|
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#PF_INVALID if value provided for the preference @c Pma0_DBOM_Prefix_Suffix, @c Pma0_DBOM_skip_node_conditions, @c Pma0_Part_Design_Type, @c Pma0_EBOMRoot_DBOMRoot_Type, @c Pma0_ChildItemType_RevOccType is invalid.
|
|
<li>#PMA0AUTOMATION_input_root_skipped if the Engineering BOM structure cannot be updated for the input @p dbom_source, because it is configured to be skipped (through preference @c Pma0_skip_node_conditions) and it does not contain any unskipped parent.
|
|
<li>#PMA0AUTOMATION_no_item_rev if the Design BOM top line is unconfigured.
|
|
<li>#PMA0AUTOMATION_invalid_part_or_design if the Part object for source object Design @p dbom_source was not created because it is not a valid type. The supported type is Design.
|
|
<li>#AOM_inst_read_protected if there is no read access or revision not configured on topline
|
|
<li>#AOM_inst_write_protected if current logged in user have no write access on Engineering BOM Line.
|
|
<li>Possibly other errors.
|
|
</ul>
|
|
*/
|
|
extern PMA0AUTOMATION_API int PMA0_update_engineering_bom(
|
|
tag_t dbom_source, /**< (I) Top BOMLine of design BOM structure.*/
|
|
tag_t* ebom_updated_target /**< (O) Top BOMLine in updated engineering BOM structure*/
|
|
);
|
|
|
|
|
|
/**
|
|
Updates the design BOM structure linked to the engineering BOM structure starting from a given engineering top line.
|
|
<br/>The design structure is updated as per the default action specified on the engineering BOMLine property @c pma0UpdateAction.
|
|
@note The following preferences must be appropriately set prior to calling this ITK:
|
|
<ul>
|
|
<li>@c Pma0_DBOM_Prefix_Suffix
|
|
<li>@c Pma0_EBOM_skip_node_conditions
|
|
<li>@c Pma0_EBOM_skip_occurrence_conditions
|
|
<li>@c Pma0_Part_Design_Type
|
|
<li>@c Pma0_EBOMRoot_DBOMRoot_Type
|
|
</ul>
|
|
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#PF_INVALID if value provided for the preference @c Pma0_DBOM_Prefix_Suffix, @c Pma0_DBOM_skip_node_conditions, @c Pma0_Part_Design_Type, @c Pma0_EBOMRoot_DBOMRoot_Type, @c Pma0_ChildItemType_RevOccType is invalid.
|
|
<li>#PMA0AUTOMATION_input_root_skipped if the Design BOM structure cannot be updated for the input @p ebom_source, because it is configured to be skipped (through preference @c Pma0_skip_node_conditions) and it does not contain any unskipped parent.
|
|
<li>#PMA0AUTOMATION_no_item_rev if the Engineering BOM top line is unconfigured.
|
|
<li>#PMA0AUTOMATION_invalid_part_or_design if the Design object for source object Part @p dbom_source was not created because it is not a valid type. The supported type is Part.
|
|
<li>#AOM_inst_read_protected if there is no read access or revision not configured on topline
|
|
<li>#AOM_inst_write_protected if current logged in user have no write access on Design BOM Line.
|
|
<li>Possibly other errors.
|
|
</ul>
|
|
*/
|
|
extern PMA0AUTOMATION_API int PMA0_update_design_bom(
|
|
tag_t ebom_source, /**< (I) Top BOMLine of engineering BOM structure.*/
|
|
tag_t* dbom_updated_target /**< (O) Top BOMLine in updated design BOM structure*/
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
/**
|
|
@}
|
|
*/
|
|
|
|
#include <Pma0automation/libpma0automation_undef.h>
|
|
#endif
|
|
#pragma once
|