The merge master party is the party in a duplicate set that remains in the TCA Registry after a merge. The HZ: Merge Master Party Defaulting profile option setting determines the method to use for defaulting the master for each duplicate set. You can define a custom user hook and set the profile option to User Hook to use your method. See: DQM Deployment Category.
Note: If you select User Hook as the profile value, then you must write the custom code in procedure HZ_USER_HOOK_PKG.default_master_user_hook() to link the user hook to the custom PL/SQL procedure.
The parameters for the custom user hook are:
Input
p_dup_set_id (duplicate set identifier)
Output
x_master_party_id
x_master_party_name
x_return_status
x_msg_count
x_msg_data
/* Use OSO party as master party, if it doesn't exist, use any party id
in the dup set*/
procedure default_master_user_hook(
p_dup_set_id IN NUMBER,
x_master_party_id OUT NOCOPY NUMBER,
x_master_party_name OUT NOCOPY VARCHAR2,
x_return_status OUT NOCOPY VARCHAR2,
x_msg_count OUT NOCOPY NUMBER,
x_msg_data OUT NOCOPY VARCHAR2 ) is
cursor get_OSOPartyId_csr is
SELECT PP.PARTY_ID, PP.PARTY_NAME
FROM HZ_PARTIES PP,HZ_DUP_SETS DS, HZ_DUP_SET_PARTIES DSP,
HZ_DUP_BATCH DB
WHERE PP.PARTY_ID =DSP.DUP_PARTY_ID
AND DB.DUP_BATCH_ID = DS.DUP_BATCH_ID
AND DS.DUP_SET_ID = DSP.DUP_SET_ID
AND DSP.DUP_SET_ID= p_dup_set_id
AND PP.CREATED_BY_MODULE = 'OSO_CUSTOMER'
AND NVL(DSP.MERGE_FLAG,'Y') <> 'N'
AND ROWNUM = 1;
cursor get_RandomPartyId_csr is
SELECT PP.PARTY_ID, PP.PARTY_NAME
FROM HZ_PARTIES PP,HZ_DUP_SETS DS, HZ_DUP_SET_PARTIES DSP,
HZ_DUP_BATCH DB
WHERE PP.PARTY_ID =DSP.DUP_PARTY_ID
AND DB.DUP_BATCH_ID = DS.DUP_BATCH_ID
AND DS.DUP_SET_ID = DSP.DUP_SET_ID
AND DSP.DUP_SET_ID= p_dup_set_id
AND NVL(DSP.MERGE_FLAG,'Y') <> 'N'
AND ROWNUM = 1;
begin
-- Initialize return status to SUCCESS
x_return_status := FND_API.G_RET_STS_SUCCESS;
open get_OSOPartyId_csr;
fetch get_OSOPartyId_csr into x_master_party_id,x_master_party_name;
close get_OSOPartyId_csr;
if x_master_party_id is null /* OSO party doesn't exist */
then
open get_RandomPartyId_csr;
fetch get_RandomPartyId_csr into
x_master_party_id,x_master_party_name;
close get_RandomPartyId_csr;
end if;
EXCEPTION
WHEN OTHERS THEN
x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
FND_MSG_PUB.ADD;
FND_MSG_PUB.Count_And_Get(
p_encoded => FND_API.G_FALSE,
p_count => x_msg_count,
p_data => x_msg_data);
end;