IFS Applications 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 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 dialog box 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 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 |
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 |
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 |