IFS Cloud has several generic and very useful types of object connections that can be made from different kinds of business objects throughout the application. Examples of connected objects are characteristics, documents, media library and virtual maps. Although these attachment services provide valuable functionality, one of the limitations is that the connected object needs to be directly attached to a specific business object, such as a customer order line. This limitation makes it quite cumbersome to maintain connected objects for transactional business objects, such as customer orders, work orders and shop orders.
For example, there is a business scenario where assembly instructions should be accessible on certain shop order operation lines. Previously you had to connect the instruction to each relevant shop order operation line. A better solution would have been to connect the document to the actual routing operation line and then have the possibility to access that document on all shop orders that are based on this routing. The latter is what the Object Connection Transformation feature is all about. Object Connection Transformation provides the means to support object connections to be accessed from business objects other than the ones to which they are connected. In order to do so you have to specify an object transformation method. Object Connection Transformation is currently supported for document, media, audit and nonconformance reporting services. Only active transformations will be considered for these services.
Object connections are attached to the business object by the business objects keys, such as order number, part number, customer identity, and so on. When specifying an object connection transformation you need to specify how the keys should be transformed from one business object to another. For example, you are accessing a customer order line (target) and want to see media connected to the sales part (source). Then you need to specify the attributes on the customer order line which should be used to format the sales part key. The sales part key consists of a catalog (Part_No) number and the site identifier (Contract). Luckily both these attributes are available in the customer order line database view which enables an easy transformation setup.
The Edit Transformation command is used to define the transformation method. The requirement is to map the source key with the target key. In the example above the mapping would be CONTRACT=CONTRACT, CATALOG_NO=CATALOG_NO. When the column names are identical it is possible to use the more simplified format CONTRACT, CATALOG_NO. The edit dialog will help you by formatting the correct transformation method. In addition to database columns, it is also possible to add static numbers or strings when defining the column mapping. String values should be entered within quotations marks, such as "any string value".
The transformation format always follows this pattern: Source Key1= Target Attribute 1, Source Key 2 = Target Attribute 2, etc. The target attribute could be left out if it matches the source key.
For some scenarios it is not possible to map the target and source columns due to the fact that the source columns are not included in the target database view. You then have two options which both require some programming work. You can either extend the target view with the necessary columns or create a stored function that makes the actual key transformation. The name of the function should in this case be registered as the transformation method. Note that it should also hold the package name, e.g. My_Package_API.My_Transformation. It needs to be defined as a function that returns a string value. It also requires two values in parameters (strings); the Target Key Reference and the Service Name (in that specific order).
In addition, it is possible to set up the possibility for objects to be derived from several sources, e.g. maybe you want to see media connected to both sales and inventory parts. The only thing you need to consider in this case is that the editable flag is correctly set.
The target view can also be extended with necessary columns by using custom fields. The custom fields functionality is found in the Solution Manager/User Interface/Custom Objects/Custom Fields window. Custom fields will be added in a new custom database view. The new custom database view can be based on the business object's base view. For example, create custom fields for ActiveSeparate LU and where the base view is ACTIVE_SEPRATE. Custom fields, once they have been published, are now added in a new view with the name ACTIVE_SEPARATE_CFV.
The custom database view can also be based on any other available view for the LU. Available views for a LU are shown in Custom Fields/Approved Detail Views. For example, create custom fields for ActiveSeparate LU and open the Custom Fields/Approved Detail Views and select the view ACTIVE_SEPARATE_UIV view. Publish the new custom fields and they will be added in two new views; ACTIVE_SEPARATE_CFV and ACTIVE_SEPARATE_UIV_CFV.
The target view for the transformation method is defined in the Solution Manager/Object Connections and the field View Name. So, any columns shown in the Target LU Key list, comes from the view defined in Object Connections/View Name field. The view defined for a LU in Object Connections/View Name field is usually the base view, but it doesn't have to be the base view. The view can be changed to any other available view for the LU. For example, changed to a custom database view, if custom fields have been created for the LU. After selecting a custom view in object connections, any custom fields will then be shown in the Target LU Key list. For example, after adding custom fields for ActiveSeparate LU, the view ACTIVE_SEPARATE_UIV might be changed to the ACTIVE_SEPARATE_UIV_CFV view. Custom fields added in the ACTIVE_SEPARATE_UIV_CFV will now be available in Object Connection Transformation/Transformation Method/Target LU Key list.
The editable value controls whether it is possible to attach new objects or not when using object transformations. It also controls where (on which business object) any new objects should be attached. The editable value can have three different settings:
If you set up the possibility for objects to be derived from several business objects, then you need to consider the editable value so the system is informed about to which business object any new objects should be attached.
There are set of system defined rules in object connection transformation which will result in unexpected application behaviors if you change them without knowing the impact. For example, a document connected to an actual routing operation line cannot be accessed through shop orders that are based on this routing if the rule stating this transformation is changed, deleted or made inactive. So you need to analyze the impact of the rule before you change it.
The system defined rules are listed below.
Target LU Name | Service name | Source LU Name | Editable | Transformation method | Active |
ActiveRound | DocReferenceObject | WorkOrder | SOURCE | WO_NO | X |
ActiveSeparate | DocReferenceObject | WorkOrder | SOURCE | WO_NO | X |
BusinessActivity | DocReferenceObject | BusinessMail | TARGET | BUSINESS_MAIL_API.TRANSFORM_ACTIVITY_MAIL | X |
BusinessLeadContact | DocReferenceObject | BusinessMail | TARGET | BUSINESS_MAIL_API.TRANSFORM_LEAD_CONTACT_MAIL | X |
BusinessOpportunity | DocReferenceObject | BusinessMail | TARGET | BUSINESS_MAIL_API.TRANSFORM_OPPORTUNITY_MAIL | X |
CmpuntCompatibleUnit | DocReferenceObject | CmpcfgCmpUnitTemplate | TARGET | CMP_UNIT_TEMPLATE_SQ,REVISION_NO=TEMPLATE_REVISION_NO | X |
CmpuntCompatibleUnit | MediaLibrary | CmpcfgCmpUnitTemplate | TARGET | CMP_UNIT_TEMPLATE_SQ,REVISION_NO=TEMPLATE_REVISION_NO | X |
ConfigSpecValue | MediaLibrary | BasePartCharacteristic | NONE | CONFIG_MEDIA_MANAGER_API.TRANSFORM_CONFIG_KEY | X |
CustomerInfoContact | DocReferenceObject | BusinessMail | TARGET | BUSINESS_MAIL_API.TRANSFORM_CUST_CONTACT_MAIL | X |
CustomerOrderLine | DocReferenceObject | PartRevision | TARGET | SALES_OBJECT_TRANSFORM_API.TRANSF_ORD_LINE_TO_PART_REV | X |
CustomerOrderLine | DocReferenceObject | EngPartRevision | TARGET | SALES_OBJECT_TRANSFORM_API.TRANSF_ORD_LINE_TO_ENG_PART_RV | X |
CustomerOrderLine | DocReferenceObject | SalesPart | TARGET | CATALOG_NO,CONTRACT | X |
DeliveryWorkList | DocReferenceObject | PlanningItem | SOURCE | ITEM_NO, ITEM_REVISION, PLANNING_NO | X |
DeliveryWorkList | MediaLibrary | PlanningItem | SOURCE | ITEM_NO, ITEM_REVISION, PLANNING_NO | X |
Equipment Object | DocReferenceObject | CmpcfgCmpUnitTemplate | TARGET | EQUIPMENT_OBJECT_UTIL_API.TRANSF_EQUIP_TO_CU_TEMPLATE | X |
Equipment Object | MediaLibrary | CmpcfgCmpUnitTemplate | TARGET | EQUIPMENT_OBJECT_UTIL_API.TRANSF_EQUIP_TO_CU_TEMPLATE | X |
Equipment Object | DocReferenceObject | CmpuntCompatibleUnit | TARGET | EQUIPMENT_OBJECT_UTIL_API.TRANSF_EQUIP_OBJ_TO_CU | X |
Equipment Object | MediaLibrary | CmpuntCompatibleUnit | TARGET | EQUIPMENT_OBJECT_UTIL_API.TRANSF_EQUIP_OBJ_TO_CU | X |
HistoricalRound | DocReferenceObject | WorkOrder | SOURCE | WO_NO | X |
HistoricalRound | DocReferenceObject | WorkOrder | SOURCE | WO_NO | X |
InquiryLinePartBlk | DocReferenceObject | PartRevision | TARGET | INQUIRY_LINE_API.TRANSF_INQ_LINE_TO_PART_REV | X |
InquiryLinePartBlk | DocReferenceObject | EngPartRevision | TARGET | INQUIRY_LINE_API.TRANSF_INQ_LINE_TO_ENG_REV | X |
InquiryLinePartBlk | DocReferenceObject | PurchasePart | TARGET | CONTRACT,PART_NO | X |
InquiryLinePartOrder | DocReferenceObject | PartRevision | TARGET | INQUIRY_LINE_API.TRANSF_INQ_LINE_TO_PART_REV | X |
InquiryLinePartOrder | DocReferenceObject | EngPartRevision | TARGET | INQUIRY_LINE_API.TRANSF_INQ_LINE_TO_ENG_REV | X |
InquiryLinePartOrder | DocReferenceObject | PurchasePart | TARGET | CONTRACT,PART_NO | X |
InquiryLinePartOrder | DocReferenceObject | PurchaseReqLinePart | TARGET | LINE_NO=REQ_LINE_NO,RELEASE_NO=REQ_RELEASE_NO,REQUISITION_NO | X |
InventoryPart | DocReferenceObject | EngPartRevision | TARGET | INVENTORY_PART_API.TRANSF_INVENT_PART_TO_ENG_REV | X |
InventoryPartInStock | DocReferenceObject | PartRevision | TARGET | CONTRACT,ENG_CHG_LEVEL,PART_NO | X |
InventoryPartInStock | DocReferenceObject | EngPartRevision | TARGET | INVENTORY_PART_IN_STOCK_API.TRANS_INV_PART_STK_TO_ENG_REV | X |
ManSuppInvoice | DocReferenceObject | PostingProposalHead | TARGET | COMPANY,INVOICE_ID,PROPOSAL_ID=1 | X |
PlantObject | DocReferenceObject | CmpcfgCmpUnitTemplate | TARGET | PLANT_OBJECT_UTIL_API.TRANSF_PLD_OBJ_TO_TEMPLATE | X |
PlantObject | MediaLibrary | CmpcfgCmpUnitTemplate | TARGET | PLANT_OBJECT_UTIL_API.TRANSF_PLD_OBJ_TO_TEMPLATE | X |
PlantObject | DocReferenceObject | CmpuntCompatibleUnit | TARGET | COMPATIBLE_UNIT_SQ=CMP_UNIT_SQ,REVISION_NO=CMP_UNIT_REV | X |
PlantObject | MediaLibrary | CmpuntCompatibleUnit | TARGET | COMPATIBLE_UNIT_SQ=CMP_UNIT_SQ,REVISION_NO=CMP_UNIT_REV | X |
PmAction | DocReferenceObject | TaskTemplate | TARGET | TASK_TEMPLATE_API.TRANS_TASK_TEMPLATE_TO_PM | X |
PostingProposal | DocReferenceObject | PostingProposalHead | TARGET | COMPANY,INVOICE_ID,PROPOSAL_ID | X |
ProdStructureHead | DocReferenceObject | PartRevision | TARGET | CONTRACT,ENG_CHG_LEVEL,PART_NO | X |
ProdStructureHead | DocReferenceObject | EngPartRevision | TARGET | MANUF_STRUCTURE_UTIL_API.TRANSF_PROD_STR_HD_TO_ENG_REV | X |
ProjectProductStructure | DocReferenceObject | PartRevision | TARGET | PROJECT_PRODUCT_STRUCTURE_API.TRANSF_PROJ_STRUCT_TO_PART_REV | X |
ProjectProductStructure | DocReferenceObject | EngPartRevision | TARGET | PART_NO,PART_REV | X |
PurchaseOrderLine | DocReferenceObject | PartRevision | TARGET | PURCHASE_ORDER_LINE_API.TRANSF_ORD_LINE_TO_PART_REV | X |
PurchaseOrderLine | DocReferenceObject | EngPartRevision | TARGET | PURCHASE_ORDER_LINE_API.TRANSF_ORD_LINE_TO_ENG_PART_RV | X |
PurchaseOrderLine | DocReferenceObject | PurchasePart | TARGET | CONTRACT,PART_NO | X |
PurchaseOrderLine | DocReferenceObject | PurchaseReqLinePart | TARGET | PURCHASE_ORDER_LINE_API.TRANSF_ORD_LINE_TO_REQ_LINE | X |
PurchaseOrderLinePart | DocReferenceObject | PartRevision | TARGET | CONTRACT,ENG_CHG_LEVEL,PART_NO | X |
PurchaseOrderLinePart | DocReferenceObject | EngPartRevision | TARGET | PURCHASE_ORDER_LINE_API.TRANSF_ORD_LINE_TO_ENG_PART_RV | X |
PurchaseOrderLinePart | DocReferenceObject | PurchasePart | TARGET | CONTRACT,PART_NO | X |
PurchaseOrderLinePart | DocReferenceObject | PurchaseReqLinePart | TARGET | LINE_NO=REQ_LINE,RELEASE_NO=REQ_RELEASE,REQUISITION_NO | X |
PurchasePart | DocReferenceObject | PartRevision | TARGET | PURCHASE_PART_API.TRANSF_PURCH_PART_TO_PART_REV | X |
PurchasePart | DocReferenceObject | EngPartRevision | TARGET | PURCHASE_PART_API.TRANSF_PURCH_PART_TO_ENG_REV | X |
PurchaseReceipt | DocReferenceObject | PartCatalog | TARGET | PURCHASE_RECEIPT_API.TRANSF_RECEIPT_TO_PARTCA | X |
PurchaseReceipt | DocReferenceObject | PartRevision | TARGET | PURCHASE_RECEIPT_API.TRANSF_RECEIPT_TO_PART_REV | X |
PurchaseReceipt | DocReferenceObject | EngPartRevision | TARGET | PURCHASE_RECEIPT_API.TRANSF_RECEIPT_TO_ENG_PART_RV | X |
PurchaseReceipt | DocReferenceObject | PurchasePart | TARGET | PURCHASE_RECEIPT_API.TRANSF_RECEIPT_TO_PURCH_PART | X |
PurchaseReceipt | DocReferenceObject | PurchaseOrderLinePart | TARGET | LINE_NO,ORDER_NO,RELEASE_NO | X |
PurchaseReqLinePart | DocReferenceObject | PartRevision | TARGET | CONTRACT,ENG_CHG_LEVEL,PART_NO | X |
PurchaseReqLinePart | DocReferenceObject | EngPartRevision | TARGET | PURCHASE_REQ_LINE_API.TRANSF_REQ_LINE_TO_ENG_PART_RV | X |
PurchaseReqLinePart | DocReferenceObject | PurchasePart | TARGET | CONTRACT,PART_NO | X |
QmanCtrlPlanLineSo | MediaLibrary | QmanControlPlanLine | TARGET | CONTROL_PLAN_NO,CTRL_PLAN_REVISION_NO,DATA_POINT | X |
QmanCtrlPlanLineSo | DocReferenceObject | QmanControlPlanLine | TARGET | CONTROL_PLAN_NO,CTRL_PLAN_REVISION_NO,DATA_POINT | X |
QuotationLinePartBlk | DocReferenceObject | PartRevision | TARGET | INQUIRY_LINE_API.TRANSF_INQ_LINE_TO_PART_REV | X |
QuotationLinePartBlk | DocReferenceObject | EngPartRevision | TARGET | INQUIRY_LINE_API.TRANSF_INQ_LINE_TO_ENG_REV | X |
QuotationLinePartBlk | DocReferenceObject | PurchasePart | TARGET | INQUIRY_LINE_API.TRANSF_QUOT_LINE_TO_PURCH_PART | X |
QuotationLinePartBlk | DocReferenceObject | InquiryLinePartBlk | TARGET | INQUIRY_NO,LINE_NO | X |
QuotationLinePartOrd | DocReferenceObject | PartRevision | TARGET | INQUIRY_LINE_API.TRANSF_INQ_LINE_TO_PART_REV | X |
QuotationLinePartOrd | DocReferenceObject | EngPartRevision | TARGET | INQUIRY_LINE_API.TRANSF_INQ_LINE_TO_ENG_REV | X |
QuotationLinePartOrd | DocReferenceObject | PurchasePart | TARGET | INQUIRY_LINE_API.TRANSF_QUOT_LINE_TO_PURCH_PART | X |
QuotationLinePartOrd | DocReferenceObject | InquiryLinePartOrder | TARGET | INQUIRY_NO,LINE_NO | X |
RoundStandardJob | DocReferenceObject | StandardJob | SOURCE | CONTRACT,STD_JOB_ID,STD_JOB_REVISION | X |
RoutingHead | DocReferenceObject | PartRevision | TARGET | ROUTING_LIST_API.TRANSF_ROUT_HEAD_TO_PART_REV | X |
RoutingHead | DocReferenceObject | EngPartRevision | TARGET | ROUTING_LIST_API.TRANSF_ROUT_HD_TO_ENG_PART_REV | X |
RoutingOperation | DocReferenceObject | StandardOperation | TARGET | CONTRACT,STD_OPERATION_NAME | X |
RoutingOperation | DocReferenceObject | RoutOperationTemplate | TARGET | ROUTING_OPERATION_LIST_API.TRANSF_ROUT_OP_TO_ROUT_OP_TMPL | X |
RoutOperationTemplate | DocReferenceObject | StandardOperation | TARGET | CONTRACT,STD_OPERATION_NAME | X |
SalesPart | DocReferenceObject | PartRevision | TARGET | SALES_OBJECT_TRANSFORM_API.TRANSF_SALES_PART_TO_PART_REV | X |
SalesPart | DocReferenceObject | EngPartRevision | TARGET | SALES_OBJECT_TRANSFORM_API.TRANSF_SALES_TO_ENG_PART_REV | X |
SeparateStandardJob | DocReferenceObject | StandardJob | SOURCE | CONTRACT,STD_JOB_ID,STD_JOB_REVISION | X |
ShopMaterialAlloc | DocReferenceObject | PartRevision | TARGET | SHOP_ORD_UTIL_API.TRANSF_MAT_ALLOC_TO_PART_REV | X |
ShopMaterialAlloc | DocReferenceObject | EngPartRevision | TARGET | SHOP_ORD_UTIL_API.TRANSF_MAT_ALLO_TO_ENG_PART_RV | X |
ShopMaterialAlloc | MediaLibrary | PartCatalog | TARGET | PART_NO | X |
ShopMaterialAlloc | DocReferenceObject | PartCatalog | TARGET | PART_NO | X |
ShopMaterialAllocGuide | MediaLibrary | ManufStructWorkGuide | TARGET | SHOP_ORD_WORK_GUIDE_UTIL_API.TRANSFORM_ALLOC_GUIDE_KEY__ | X |
ShopMaterialAllocGuide | DocReferenceObject | ManufStructWorkGuide | TARGET | SHOP_ORD_WORK_GUIDE_UTIL_API.TRANSFORM_ALLOC_GUIDE_KEY__ | X |
ShopOrd | DocReferenceObject | PartRevision | TARGET | CONTRACT,ENG_CHG_LEVEL,PART_NO | X |
ShopOrd | DocReferenceObject | EngPartRevision | TARGET | SHOP_ORD_UTIL_API.TRANSF_SHOP_ORD_TO_ENG_PART_RV | X |
ShopOrderOperation | MediaLibrary | ShopOrd | TARGET | ORDER_NO,RELEASE_NO,SEQUENCE_NO | X |
ShopOrderOperation | MediaLibrary | PartCatalog | TARGET | PART_NO | X |
ShopOrderOperation | DocReferenceObject | ShopOrd | TARGET | ORDER_NO,RELEASE_NO,SEQUENCE_NO | X |
ShopOrderOperation | DocReferenceObject | EngPartRevision | TARGET | SHOP_ORD_UTIL_API.TRANSF_SHOP_OP_TO_ENG_PART_REV | X |
ShopOrderOperation | DocReferenceObject | InventoryPart | TARGET | CONTRACT,PART_NO | X |
ShopOrderOperation | DocReferenceObject | PartRevision | TARGET | SHOP_ORD_UTIL_API.TRANSF_SHOP_OP_TO_PART_REV | X |
ShopOrderOperation | DocReferenceObject | RoutingHead | TARGET | SHOP_ORD_UTIL_API.TRANSF_SHOP_OP_TO_ROUT_HEAD | X |
ShopOrderOperation | DocReferenceObject | RoutingAlternate | TARGET | SHOP_ORD_UTIL_API.TRANSF_SHOP_OP_TO_ROUT_ALT | X |
ShopOrderOperation | DocReferenceObject | RoutingOperation | TARGET | SHOP_ORD_UTIL_API.TRANSF_SHOP_OP_TO_ROUT_OP | X |
ShopOrderOperation | DocReferenceObject | ProdStructureHead | TARGET | SHOP_ORD_UTIL_API.TRANSF_SHOP_OP_TO_STRUCT_HEAD | X |
ShopOrderOperGuide | MediaLibrary | RoutingOperWorkGuide | TARGET | SHOP_ORD_WORK_GUIDE_UTIL_API.TRANSFORM_OP_WORK_GUIDE_KEY__ | X |
ShopOrderOperGuide | DocReferenceObject | RoutingOperWorkGuide | TARGET | SHOP_ORD_WORK_GUIDE_UTIL_API.TRANSFORM_OP_WORK_GUIDE_KEY__ | X |
ShopOrderOperTool | MediaLibrary | ManufTool | TARGET | CONTRACT,TOOL_ID | X |
ShopOrderOperTool | DocReferenceObject | ManufTool' | TARGET | CONTRACT,TOOL_ID | X |
ShopOrderProp | DocReferenceObject | PartRevision | TARGET | CONTRACT,ENG_CHG_LEVEL,PART_NO | X |
ShopOrderProp | DocReferenceObject | EngPartRevision | TARGET | SHOP_ORD_UTIL_API.TRANSF_SHP_PROP_TO_ENG_PART_RV | X |
SupplierInfoContact | DocReferenceObject | BusinessMail | TARGET | BUSINESS_MAIL_API.TRANSFORM_SUPP_CONTACT_MAIL | X |