Portal announcement

George_1
Giga Guru

I am creating records in the Announcement [announcement] table using a Record Producer.

I have added this Record Producer to multiple portals (e.g., Service Portal (SP) and HR Portal). When a user submits the Record Producer, the Announcement record gets created successfully.

However, I want to automatically associate the Announcement with the correct portal in the Portals related list (m2m_announcement_portal) based on where the Record Producer was submitted.

 

I am unable to reliably detect which portal the Record Producer was submitted from.

How can this be done?

 

George_1_0-1780414944273.png

 

2 ACCEPTED SOLUTIONS

Hi @George_1 

 

Try this once:

Refer: https://www.servicenow.com/community/servicenow-ai-platform-forum/make-service-portal-banner-announc...

 

  1. Create a hidden Single line text variable  in your record producer
  2. Create a onLoad Catalog client script.

 

function onLoad() {

        try {

        var portal = spAnnouncement.getPortal(); // Native portal API

        if (portal) {

            g_form.setValue('current_portal', portal.sys_id);

        }

    } catch (e) {

        var portalURL = top.location.href;

        if (portalURL.indexOf('id=') > -1) {

            var portalName = g_form.getParameter('id');

            g_form.setValue('current_portal', portalName);

        }

    }

    g_form.setDisplay('current_portal', false);

}

 

 

  1. Update producer script:

 

var ann = new GlideRecord('announcement');

    ann.initialize();

    ann.name = 'Announcement created by ' + current.number;

    ann.title = producer.short_description;

    ann.summary = producer.description;    

    ann.from = new GlideDateTime();      

    ann.insert();

    var userPortal = producer.current_portal;

   

    if (userPortal) {

        var m2m = new GlideRecord('m2m_announcement_portal');

        m2m.initialize();

        m2m.announcement = ann.sys_id;

        m2m.sp_portal = userPortal;

        m2m.insert();

    }

Please Accept the solution if it assisted you with your question & Mark this response as Helpful.
Regards
Tanushree Maiti
ServiceNow Technical Architect
LinkedIn: https://www.linkedin.com/in/tanushreemaiti

View solution in original post

Ankur Bawiskar
Tera Patron

@George_1 

the only option is this

1) create a hidden string variable to hold the name of portal

2) use onLoad catalog client script to grab the portal name from URL

function onLoad() {
    // Check if we are in the Service Portal
    var url = top.location.href;
    if (url.indexOf('/sp') > -1)
        g_form.setValue('hiddenvariable', 'sp');
    else if (url.indexOf('/hr') > -1)
        g_form.setValue('hiddenvariable', 'hr');
}

3) use record producer script to get the portal name and then grab the sys_id and use in your script

var portalName = producer.hiddenvariable;

var gr = new GlideRecord("sp_portal");
gr.addQuery("url_suffix", portalName);
gr.query();
if (gr.next()) {
    // you got your portal sysid here
}

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

Regards,
Ankur
Certified Technical Architect  ||  10x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

9 REPLIES 9

Hi @George_1 

 

Though DM manipulation is not recommended approch , but you have seen  top.location.href is part of DOM manipulation.

 

Ensure you unchecked Isolate Script on the Client Script record so DOM/Window objects can be modified.

Please Accept the solution if it assisted you with your question & Mark this response as Helpful.
Regards
Tanushree Maiti
ServiceNow Technical Architect
LinkedIn: https://www.linkedin.com/in/tanushreemaiti

@Tanushree Maiti 

Could you please share screenshot from your PDI if you got the portal name using the line you shared?

var portal = spAnnouncement.getPortal(); // Native portal API

55.png

it would be helpful for members.

Regards,
Ankur
Certified Technical Architect  ||  10x ServiceNow MVP  ||  ServiceNow Community Leader

Ankur Bawiskar
Tera Patron

@George_1 

the only option is this

1) create a hidden string variable to hold the name of portal

2) use onLoad catalog client script to grab the portal name from URL

function onLoad() {
    // Check if we are in the Service Portal
    var url = top.location.href;
    if (url.indexOf('/sp') > -1)
        g_form.setValue('hiddenvariable', 'sp');
    else if (url.indexOf('/hr') > -1)
        g_form.setValue('hiddenvariable', 'hr');
}

3) use record producer script to get the portal name and then grab the sys_id and use in your script

var portalName = producer.hiddenvariable;

var gr = new GlideRecord("sp_portal");
gr.addQuery("url_suffix", portalName);
gr.query();
if (gr.next()) {
    // you got your portal sysid here
}

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

Regards,
Ankur
Certified Technical Architect  ||  10x ServiceNow MVP  ||  ServiceNow Community Leader

George_1
Giga Guru

@Anuj 

var url = top.location.href;

 

when i add this in onload CS it is giving javascript error.

@George_1 

I didn't get any error when used in portal

see below

share your complete script and config screenshots

55.png56.png

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

Regards,
Ankur
Certified Technical Architect  ||  10x ServiceNow MVP  ||  ServiceNow Community Leader