The following lines contain the word 'select', 'insert', 'update' or 'delete':
p_entity_alias IN VARCHAR2, -- alias for entity as used in SELECT
p_function_name IN VARCHAR2 -- FND function name
) RETURN VARCHAR2
IS
l_alias VARCHAR2(30);
x_updateable_flag OUT NOCOPY VARCHAR2, -- can we mess with it?
x_deleteable_flag OUT NOCOPY VARCHAR2 -- can we get rid of it?
) IS
BEGIN
--
-- This is for those cases where the caller wants to check all the access
-- at once. Merely a wrapper for the individual operation-level checks.
--
-- Check view access
x_viewable_flag := check_row_viewable (
p_entity_name => p_entity_name,
p_data_source => p_data_source,
p_entity_pk1 => p_entity_pk1,
p_entity_pk2 => p_entity_pk2,
p_party_id => p_party_id
);
x_updateable_flag := check_row_updateable (
p_entity_name => p_entity_name,
p_data_source => p_data_source,
p_entity_pk1 => p_entity_pk1,
p_entity_pk2 => p_entity_pk2,
p_party_id => p_party_id
);
x_deleteable_flag := check_row_deleteable (
p_entity_name => p_entity_name,
p_data_source => p_data_source,
p_entity_pk1 => p_entity_pk1,
p_entity_pk2 => p_entity_pk2,
p_party_id => p_party_id
);
p_operation_code => 'SELECT',
p_db_object_name => p_entity_name,
p_instance_pk1_value => p_entity_pk1,
p_instance_pk2_value => p_entity_pk2,
x_return_status => l_return_status,
x_msg_count => l_msg_count,
x_msg_data => l_msg_data
);
FUNCTION check_row_updateable (
p_entity_name IN VARCHAR2, -- table name
p_data_source IN VARCHAR2, -- if applicable
p_entity_pk1 IN VARCHAR2, -- primary key
p_entity_pk2 IN VARCHAR2, -- primary key pt. 2
p_party_id IN NUMBER, -- only pass if available
p_function_name IN VARCHAR2 -- FND function name
) RETURN VARCHAR2 -- "Y" or "N" if we can update the row
IS
l_updateable_flag VARCHAR2(1) := 'N';
* Special code added to support MOSR update functionality BASED ON PROFILE
*/
IF p_entity_name = 'HZ_ORIG_SYS_REFERENCES' THEN
IF HZ_UTILITY_V2PUB.is_purchased_content_source(p_data_source) = 'Y' THEN
l_updateable_flag := 'N';
IF NVL(FND_PROFILE.value('HZ_SSM_VIEW_UPDATE_STATE'), 'VIEW_ONLY') = 'CREATE_AND_UPDATE' THEN
l_updateable_flag := 'Y';
return l_updateable_flag;
l_updateable_flag := HZ_DSS_UTIL_PUB.TEST_INSTANCE (
p_operation_code => 'UPDATE',
p_db_object_name => p_entity_name,
p_instance_pk1_value => p_entity_pk1,
p_instance_pk2_value => p_entity_pk2,
p_user_name => FND_GLOBAL.User_Name,
x_return_status => l_return_status,
x_msg_count => l_msg_count,
x_msg_data => l_msg_data
);
l_updateable_flag := 'N';
ELSIF l_updateable_flag = 'T' THEN -- Will return FND_API.G_TRUE from HZ_DSS_UTIL_PUB
l_updateable_flag := 'Y';
l_updateable_flag := 'N';
IF l_updateable_flag = 'N' THEN
RETURN l_updateable_flag;
/* Bug 4693719 : Do not call CheckUserUpdatePrivilege from CPUI
* CPUI should display update enabled icon in the UI so that
* primary_flag, start_date, status etc columns can be updated.
* Error will be raised from API if the rules are violated
*
If p_entity_name in ('HZ_RELATIONSHIPS', 'HZ_CODE_ASSIGNMENTS',
'HZ_CONTACT_POINTS', 'HZ_CREDIT_RATINGS', 'HZ_FINANCIAL_REPORTS',
'HZ_LOCATIONS', 'HZ_PARTY_SITES', 'HZ_FINANCIAL_NUMBERS') then
HZ_MIXNM_UTILITY.CheckUserUpdatePrivilege (
p_actual_content_source => p_data_source,
p_new_actual_content_source => 'USER_ENTERED',
p_entity_name => p_entity_name,
x_return_status => l_return_status
);
l_updateable_flag := 'N';
l_updateable_flag := 'Y';
RETURN l_updateable_flag;
END check_row_updateable;
FUNCTION check_row_deleteable (
p_entity_name IN VARCHAR2, -- table name
p_data_source IN VARCHAR2, -- if applicable
p_entity_pk1 IN VARCHAR2, -- primary key
p_entity_pk2 IN VARCHAR2, -- primary key pt. 2
p_party_id IN NUMBER, -- only pass if available
p_function_name IN VARCHAR2 -- FND function name
) RETURN VARCHAR2 -- "Y" or "N" if we can delete the row
IS
l_deleteable_flag VARCHAR2(1) := 'N';
* Special code added to support MOSR update functionality BASED ON PROFILE
*/
IF p_entity_name = 'HZ_ORIG_SYS_REFERENCES' THEN
IF NVL(FND_PROFILE.value('HZ_SSM_VIEW_UPDATE_STATE'), 'VIEW_ONLY') = 'CREATE_AND_UPDATE' THEN
l_deleteable_flag := 'Y';
return l_deleteable_flag;
l_deleteable_flag := HZ_DSS_UTIL_PUB.TEST_INSTANCE (
p_operation_code => 'DELETE',
p_db_object_name => p_entity_name,
p_instance_pk1_value => p_entity_pk1,
p_instance_pk2_value => p_entity_pk2,
p_user_name => FND_GLOBAL.User_Name,
x_return_status => l_return_status,
x_msg_count => l_msg_count,
x_msg_data => l_msg_data
);
l_deleteable_flag := 'N';
ELSIF l_deleteable_flag = 'T' THEN -- Will return FND_API.G_TRUE from HZ_DSS_UTIL_PUB
l_deleteable_flag := 'Y';
l_deleteable_flag := 'N';
RETURN l_deleteable_flag;
END check_row_deleteable;
x_updateable_list OUT NOCOPY HZ_MIXNM_UTILITY.INDEXVARCHAR1List -- pl/sql table of flags
) IS
l_return_status VARCHAR2(1);
x_updatable_flag_list => x_updateable_list,
x_return_status => l_return_status
);
x_updateable_list(i) := 'N';
SELECT hz_format_pub.format_address ( hps.LOCATION_ID , null , null ,' , ' , null , null , null , null )
INTO x_billto_address
FROM HZ_PARTY_SITES hps , HZ_CUST_ACCT_SITES_ALL hcas
WHERE hcas.BILL_TO_FLAG='P'
AND hcas.CUST_ACCOUNT_ID = p_cust_acct_id
AND hcas.PARTY_SITE_ID = hps.PARTY_SITE_ID;
SELECT HZ_FORMAT_PUB.format_address(party_site.location_id, null, null, ', ')
||decode(acct.PARTY_ID,
party_site.PARTY_ID,'',
' ('||(select party.PARTY_NAME
from HZ_PARTIES party, HZ_RELATIONSHIPS reln
where party_site.PARTY_ID = reln.PARTY_ID
AND reln.SUBJECT_TYPE = 'PERSON'
AND reln.SUBJECT_ID = party.PARTY_ID)||')')
INTO x_formatted_address
FROM HZ_CUST_ACCT_SITES_ALL site,
HZ_CUST_ACCOUNTS acct,
HZ_PARTY_SITES party_site
WHERE site.CUST_ACCT_SITE_ID = p_cust_acct_site_id
AND party_site.PARTY_SITE_ID = site.PARTY_SITE_ID
AND acct.CUST_ACCOUNT_ID = site.CUST_ACCOUNT_ID;