Hello,
Please forgive for my language and terminologies used if are incorrect
below is what I am struggling with
I have a custom module name COF
I wanted to have a relationship with opportunities 1 : M [1 Opportunity can contain many COFs]
I wanted to have a relationship with Accounts1 : M [1 Account can contain many COFs] Billing Account
I wanted to have a relationship with Accounts1 : M [1 Account can contain many COFs] Shipping Account
I wanted to have a relationship with Contacts1 : M [1 Contact can contain many COFs] Billing Contact
I wanted to have a relationship with Contacts1 : M [1 Contact can contain many COFs] Shipping Contact
I have created relationships via script
PFB below script
\custom\metadata\custom_relationships_cof.php
<?php
$dictionary["itb_cof_billto_accounts"] = array (
'relationships' =>
array (
'itb_cof_billto_accounts' =>
array (
'lhs_module' => 'Accounts',
'lhs_table' => 'accounts',
'lhs_key' => 'id',
'rhs_module'=> 'itb_cof',
'rhs_table'=> 'itb_cof',
'rhs_key' => 'id',
'relationship_type' => 'many-to-many',
'true_relationship_type' => 'one-to-many',
'join_table' => 'itb_cof_accounts',
'join_key_lhs' => 'account_id',
'join_key_rhs' => 'itb_cof_id',
'relationship_role_column' => 'account_role',
'relationship_role_column_value' => 'Bill To',
),
),
'table' => 'itb_cof_accounts',
'fields' =>
array (
'id' =>
array (
'name' => 'id',
'type' => 'id',
),
'date_modified' =>
array (
'name' => 'date_modified',
'type' => 'datetime',
),
'deleted' =>
array (
'name' => 'deleted',
'type' => 'bool',
'len' => '1',
'default' => '0',
'required' => true,
),
'account_id' =>
array (
'name' => 'account_id',
'type' => 'id',
),
'itb_cof_id' =>
array (
'name' => 'itb_cof_id',
'type' => 'id',
),
'account_role' =>
array (
'name' => 'account_role',
'type' => 'varchar',
'len' => '20',
),
),
);
$dictionary["itb_cof_shipto_accounts"] = array (
'relationships' =>
array (
'itb_cof_shipto_accounts' =>
array (
'lhs_module' => 'Accounts',
'lhs_table' => 'accounts',
'lhs_key' => 'id',
'rhs_module'=> 'itb_cof',
'rhs_table'=> 'itb_cof',
'rhs_key' => 'id',
'relationship_type' => 'many-to-many',
'true_relationship_type' => 'one-to-many',
'join_table' => 'itb_cof_accounts',
'join_key_lhs' => 'account_id',
'join_key_rhs' => 'itb_cof_id',
'relationship_role_column' => 'account_role',
'relationship_role_column_value' => 'Ship To',
),
),
'table' => 'itb_cof_accounts',
'fields' =>
array (
'id' =>
array (
'name' => 'id',
'type' => 'id',
),
'date_modified' =>
array (
'name' => 'date_modified',
'type' => 'datetime',
),
'deleted' =>
array (
'name' => 'deleted',
'type' => 'bool',
'len' => '1',
'default' => '0',
'required' => true,
),
'account_id' =>
array (
'name' => 'account_id',
'type' => 'id',
),
'itb_cof_id' =>
array (
'name' => 'itb_cof_id',
'type' => 'id',
),
'account_role' =>
array (
'name' => 'account_role',
'type' => 'varchar',
'len' => '20',
),
),
);
$dictionary["itb_cof_contacts_shipto"] = array (
'relationships' =>
array (
'itb_cof_contacts_shipto' =>
array (
'lhs_module' => 'Contacts',
'lhs_table' => 'contacts',
'lhs_key' => 'id',
'rhs_module'=> 'itb_cof',
'rhs_table'=> 'itb_cof',
'rhs_key' => 'id',
'relationship_type' => 'many-to-many',
'true_relationship_type' => 'one-to-many',
'join_table' => 'itb_cof_contacts',
'join_key_lhs' => 'contact_id',
'join_key_rhs' => 'itb_cof_id',
'relationship_role_column' => 'contact_role',
'relationship_role_column_value' => 'Ship To',
),
),
'table' => 'itb_cof_contacts',
'fields' =>
array (
'id' =>
array (
'name' => 'id',
'type' => 'id',
),
'date_modified' =>
array (
'name' => 'date_modified',
'type' => 'datetime',
),
'deleted' =>
array (
'name' => 'deleted',
'type' => 'bool',
'len' => '1',
'default' => '0',
'required' => true,
),
'contact_id' =>
array (
'name' => 'contact_id',
'type' => 'id',
),
'itb_cof_id' =>
array (
'name' => 'itb_cof_id',
'type' => 'id',
),
'contact_role' =>
array (
'name' => 'contact_role',
'type' => 'varchar',
'len' => '20',
),
),
);
$dictionary["itb_cof_contacts_billto"] = array (
'relationships' =>
array (
'itb_cof_contacts_billto' =>
array (
'lhs_module' => 'Contacts',
'lhs_table' => 'contacts',
'lhs_key' => 'id',
'rhs_module'=> 'itb_cof',
'rhs_table'=> 'itb_cof',
'rhs_key' => 'id',
'relationship_type' => 'many-to-many',
'true_relationship_type' => 'one-to-many',
'join_table' => 'itb_cof_contacts',
'join_key_lhs' => 'contact_id',
'join_key_rhs' => 'itb_cof_id',
'relationship_role_column' => 'contact_role',
'relationship_role_column_value' => 'Bill To',
),
),
'table' => 'itb_cof_contacts',
'fields' =>
array (
'id' =>
array (
'name' => 'id',
'type' => 'id',
),
'date_modified' =>
array (
'name' => 'date_modified',
'type' => 'datetime',
),
'deleted' =>
array (
'name' => 'deleted',
'type' => 'bool',
'len' => '1',
'default' => '0',
'required' => true,
),
'contact_id' =>
array (
'name' => 'contact_id',
'type' => 'id',
),
'itb_cof_id' =>
array (
'name' => 'itb_cof_id',
'type' => 'id',
),
'contact_role' =>
array (
'name' => 'contact_role',
'type' => 'varchar',
'len' => '20',
),
),
);
$dictionary["itb_cof_opportunities"] = array (
'relationships' =>
array (
'itb_cof_opportunities' =>
array (
'lhs_module' => 'Opportunities',
'lhs_table' => 'opportunities',
'lhs_key' => 'id',
'rhs_module'=> 'itb_cof',
'rhs_table'=> 'itb_cof',
'rhs_key' => 'id',
'relationship_type' => 'many-to-many',
'true_relationship_type' => 'one-to-many',
'join_table' => 'itb_cof_opportunities',
'join_key_lhs' => 'opportunity_id',
'join_key_rhs' => 'itb_cof_id',
),
),
'table' => 'itb_cof_opportunities',
'fields' =>
array (
'id' =>
array (
'name' => 'id',
'type' => 'id',
),
'date_modified' =>
array (
'name' => 'date_modified',
'type' => 'datetime',
),
'deleted' =>
array (
'name' => 'deleted',
'type' => 'bool',
'len' => '1',
'default' => '0',
'required' => true,
),
'opportunity_id' =>
array (
'name' => 'opportunity_id',
'type' => 'id',
),
'itb_cof_id' =>
array (
'name' => 'itb_cof_id',
'type' => 'id',
),
),
'indices' =>
array (
array (
'name' => 'itb_cof_opportunitiespk',
'type' => 'primary',
'fields' => array ('id'),
),
array (
'name' => 'idx_opp_cof_opp',
'type' => 'index',
'fields' => array ( 'opportunity_id'),
),
array (
'name' => 'idx_cof_oportunities',
'type' => 'alternate_key',
'fields' => array ( 'itb_cof_id' ),
)
),
);
\custom\Extension\application\Ext\TableDictionary\custom_relationships_cof.php
<?php
include('custom/metadata/custom_relationships_cof.php');
?>
After doing QRR it prompted for create table in the query box after comparing the vardefs
I executed the code and the fields got created verified the relationship tables are present in the database.
Now I have created a relate fields in the COF module as below
\custom\Extension\modules\itb_cof\Ext\Vardefs\COF_Fields.php
<?php
$dictionary["itb_cof"]["fields"]["shipping_account_name"] = array(
'name' => 'shipping_account_name',
'rname' => 'name',
'id_name' => 'shipping_account_id',
'vname' => 'LBL_SHIPPING_ACCOUNT_NAME',
'type' => 'relate',
'table' => 'shipping_accounts',
'isnull' => 'true',
'link' => 'shipping_accounts',
'module' => 'Accounts',
'source' => 'non-db',
'populate_list' =>
array (
'shipping_address_street' => 'shipping_address_street',
'shipping_address_city' => 'shipping_address_city',
'shipping_address_state' => 'shipping_address_state',
'shipping_address_postalcode' => 'shipping_address_postalcode',
'shipping_address_country' => 'shipping_address_country',
),
);
$dictionary["itb_cof"]["fields"]["shipping_account_id"] = array(
'name' => 'shipping_account_id',
'type' => 'relate',
'vname' => 'LBL_SHIPPING_ACCOUNT_ID',
'source' => 'non-db',
'link' => 'shipping_accounts',
'rname' => 'id',
'massupdate' => false,
'module' => 'Accounts',
'studio' => 'false',
'id_name' => 'account_id',
);
$dictionary["itb_cof"]["fields"]["shipping_contact_name"] = array(
'name' => 'shipping_contact_name',
'rname' => 'full_name',
'id_name' => 'shipping_contact_id',
'vname' => 'LBL_SHIPPING_CONTACT_NAME',
'type' => 'relate',
'link' => 'shipping_contacts',
'table' => 'shipping_contacts',
'isnull' => 'true',
'module' => 'Contacts',
'source' => 'non-db',
);
$dictionary["itb_cof"]["fields"]["shipping_contact_id"] = array(
'name' => 'shipping_contact_id',
'rname' => 'id',
'id_name' => 'shipping_contact_id',
'vname' => 'LBL_SHIPPING_CONTACT_ID',
'type' => 'relate',
'link' => 'shipping_contacts',
'table' => 'shipping_contacts',
'isnull' => 'true',
'module' => 'Contacts',
'source' => 'non-db',
'massupdate' => false,
);
$dictionary["itb_cof"]["fields"]["account_name"] = array(
'name' => 'account_name',
'rname' => 'name',
'id_name' => 'account_id',
'vname' => 'LBL_ACCOUNT_NAME',
'type' => 'relate',
'link' => 'billing_accounts',
'table' => 'billing_accounts',
'isnull' => 'true',
'module' => 'Accounts',
'source' => 'non-db',
'massupdate' => false,
'studio' =>
array (
'edit' => 'false',
'detail' => 'false',
'list' => 'false',
),
);
$dictionary["itb_cof"]["fields"]["account_id"] = array(
'name' => 'account_id',
'type' => 'relate',
'link' => 'billing_accounts',
'rname' => 'id',
'vname' => 'LBL_ACCOUNT_ID',
'source' => 'non-db',
'massupdate' => false,
'module' => 'Accounts',
'studio' => 'false',
'id_name' => 'account_id',
);
$dictionary["itb_cof"]["fields"]["billing_account_name"] = array(
'name' => 'billing_account_name',
'rname' => 'name',
'id_name' => 'billing_account_id',
'vname' => 'LBL_BILLING_ACCOUNT_NAME',
'type' => 'relate',
'link' => 'billing_accounts',
'table' => 'billing_accounts',
'isnull' => 'true',
'module' => 'Accounts',
'source' => 'non-db',
'importable' => 'required',
'required' => true,
'populate_list' =>
array (
'billing_address_street' => 'billing_address_street',
'billing_address_city' => 'billing_address_city',
'billing_address_state' => 'billing_address_state',
'billing_address_postalcode' => 'billing_address_postalcode',
'billing_address_country' => 'billing_address_country',
'gst_treatment_c' => 'gst_treatment_c',
),
);
$dictionary["itb_cof"]["fields"]["billing_account_id"] = array(
'name' => 'billing_account_id',
'type' => 'relate',
'vname' => 'LBL_BILLING_ACCOUNT_ID',
'source' => 'non-db',
'link' => 'billing_accounts',
'rname' => 'id',
'massupdate' => false,
'module' => 'Accounts',
'studio' => 'false',
'id_name' => 'account_id',
);
$dictionary["itb_cof"]["fields"]["billing_contact_name"] = array(
'name' => 'billing_contact_name',
'rname' => 'full_name',
'id_name' => 'billing_contact_id',
'vname' => 'LBL_BILLING_CONTACT_NAME',
'type' => 'relate',
'link' => 'billing_contacts',
'table' => 'billing_contacts',
'isnull' => 'true',
'module' => 'Contacts',
'source' => 'non-db',
'required' => true,
);
$dictionary["itb_cof"]["fields"]["billing_contact_id"] = array(
'name' => 'billing_contact_id',
'rname' => 'id',
'id_name' => 'billing_contact_id',
'vname' => 'LBL_BILLING_CONTACT_ID',
'type' => 'relate',
'link' => 'billing_contacts',
'table' => 'billing_contacts',
'isnull' => 'true',
'module' => 'Contacts',
'source' => 'non-db',
'massupdate' => false,
);
$dictionary["itb_cof"]["fields"]["shipping_accounts"] = array(
'name' => 'shipping_accounts',
'type' => 'link',
'relationship' => 'itb_cof_shipto_accounts',
'vname' => 'LBL_SHIP_TO_ACCOUNT',
'source' => 'non-db',
'link_type' => 'one',
);
$dictionary["itb_cof"]["fields"]["billing_accounts"] = array(
'name' => 'billing_accounts',
'type' => 'link',
'relationship' => 'itb_cof_billto_accounts',
'vname' => 'LBL_BILL_TO_ACCOUNT',
'source' => 'non-db',
'link_type' => 'one',
'populate_list' =>
array (
'account_id' => 'billing_account_id',
'account_name' => 'billing_account_name',
),
);
$dictionary["itb_cof"]["fields"]["shipping_contacts"] = array(
'name' => 'shipping_contacts',
'type' => 'link',
'relationship' => 'itb_cof_contacts_shipto',
'vname' => 'LBL_SHIP_TO_CONTACT',
'source' => 'non-db',
'link_type' => 'one',
);
$dictionary["itb_cof"]["fields"]["billing_contacts"] = array(
'name' => 'billing_contacts',
'type' => 'link',
'link_type' => 'one',
'vname' => 'LBL_BILL_TO_CONTACT',
'relationship' => 'itb_cof_contacts_billto',
'source' => 'non-db',
);
$dictionary["itb_cof"]["fields"]["opportunities"] = array(
'name' => 'opportunities',
'type' => 'link',
'vname' => 'LBL_OPPORTUNITY',
'relationship' => 'itb_cof_opportunities',
'link_type' => 'one',
'source' => 'non-db',
'populate_list' =>
array (
'account_id' => 'billing_account_id',
'account_name' => 'billing_account_name',
'id' => 'opportunity_id',
'name' => 'opportunity_name',
),
);
$dictionary["itb_cof"]["fields"]["opportunity_name"] = array(
'name' => 'opportunity_name',
'rname' => 'name',
'id_name' => 'opportunity_id',
'vname' => 'LBL_OPPORTUNITY_NAME',
'type' => 'relate',
'table' => 'Opportunities',
'isnull' => 'true',
'module' => 'Opportunities',
'link' => 'opportunities',
'massupdate' => false,
'source' => 'non-db',
'len' => 50,
'auto_populate' => true,
'populate_list' =>
array (
'account_id' => 'billing_account_id',
'account_name' => 'billing_account_name',
'id' => 'opportunity_id',
'name' => 'opportunity_name',
),
);
$dictionary["itb_cof"]["fields"]["opportunity_id"] = array(
'name' => 'opportunity_id',
'type' => 'relate',
'source' => 'non-db',
'rname' => 'id',
'id_name' => 'id',
'vname' => 'LBL_OPPORTUNITY_ID',
'table' => 'opportunities',
'module' => 'Opportunities',
'link' => 'opportunities',
);
?>
After that I did a quick repair and rebuild
Then in studio I have placed the fields into the record view of COF module
when I related the account, contact, opportunity record into the relate field on record view of COF module
When I try to create COF record or edit any existing COF record all the other values gets save but these related field value does not get save
I also checked into the respective database relationship table there is no entry.
can anyone point me out what I am missing here ? or where did I go wrong ?