To display partner details in the website.

To display partner details in the website we need to create saved search to get those values for that refer the KB article : https://jjknowledgebase.com/post/63756

We need to create an extension and then add the codes given below in the corresponding files.

Folder Structure:

assets/services:

PartnerDetails.Service.ss

function service(request, response)
{
	'use strict';
	try
	{
		require('JJ.PartnerDetails.PartnerDetails.ServiceController').handle(request, response);
	}
	catch(ex)
	{
		var controller = require('ServiceController');
		controller.response = response;
		controller.request = request;
		controller.sendError(ex);
	}
}

JavaScript file:

JJ.PartnerDetails.PartnerDetails.js

define(
    'JJ.PartnerDetails.PartnerDetails'
    , [
        'JJ.PartnerDetails.PartnerDetails.View'
    ]
    , function (
        PartnerDetailsView
    ) {
        'use strict';
        return {
            mountToApp: function mountToApp(container) {
                let layout = container.getComponent('Layout');
                if (layout) {
                    layout.addChildView('partner-details', function () {
                        return new PartnerDetailsView({ container: container });
                    });
                };
            },
        };
    });

JJ.PartnerDetails.PartnerDetails.Model.js

define("JJ.PartnerDetails.PartnerDetails.Model", ["Backbone", "Utils"], function (
    Backbone,
    Utils
) {
    "use strict";
    return Backbone.Model.extend({
        urlRoot: Utils.getAbsoluteUrl(
            getExtensionAssetsPath(
                "services/PartnerDetails.Service.ss"
            )
        )
    });
});

PartnerDetails.View.js

define('JJ.PartnerDetails.PartnerDetails.View', [
    'jj_partnerdetails_partnerdetails.tpl',
    'Backbone',
    'JJ.PartnerDetails.PartnerDetails.Model',
    "Profile.Model"
], function (
    jj_partnerdetails_partnerdetails_tpl,
    Backbone,
    Model,
    profilemodel
) {
    'use strict';
    return Backbone.View.extend({
        template: jj_partnerdetails_partnerdetails_tpl,
        initialize: function (options) {
            this.model = new Model();
        },
        async getContext() {
            try {
                let profile_data = profilemodel.getInstance();
                let cust_id = profile_data.get("internalid");
                let result = await this.model.fetch({ data: { cust_id: cust_id } });
                var Partner_name = result.Partner_name.replace(/d/g, '');
                return {
                    Partner_email: result.Partner_email,
                    Partner_name: Partner_name,
                    Partner_phone: result.Partner_phone
                };
            } catch (e) {
                console.error("Error@JS file", e);
                return {};
            }
        },
        async render() {
            let context = await this.getContext();
            if (context.Partner_name && context.Partner_email && context.Partner_phone) {
                this._render(context);
            } else {
                this.$el.hide();
            } return this;
        },
        _render(context) {
            this.$el.html(this.template(context));
            return this;
        }
    });
});

SuiteScript:

JJ.PartnerDetails.PartnerDetails.js

define('JJ.PartnerDetails.PartnerDetails'
    , [
        "SC.Model"
    ]
    , function (
        SCModel
    ) {
        "use strict";
        return SCModel.extend({
            partner: function (Cust_id) {
                try {
                    var customerSearch = nlapiSearchRecord("customer", null,
                        [
                            ["internalidnumber", "equalto", Cust_id]
                        ],
                        [
                            new nlobjSearchColumn("partner"),
                            new nlobjSearchColumn("email", "partner", null),
                            new nlobjSearchColumn("mobilephone", "partner", null)
                        ]
                    );
                }
                catch (error) {
                    nlapiLogExecution('ERROR', 'ERROR_SSP_LIBRARIES_EXT', JSON.stringify(customerSearch));
                }
                var partner_name;
                var partner_email;
                var partner_phone;
                try {
                    if (customerSearch) {
                        for (var j = 0; j < customerSearch.length; j++) {
                            var searchResult = customerSearch[j];
                            partner_name = searchResult.getText("partner");
                            partner_email = searchResult.getValue("email", "partner");
                            partner_phone = searchResult.getValue("mobilephone", "partner");
                        }
                    }
                } catch (error) {
                    nlapiLogExecution('ERROR', 'customersearcherror', JSON.stringify(customerSearch));
                }
                return {
                    Partner_name: partner_name,
                    Partner_email: partner_email,
                    Partner_phone: partner_phone,
                };
            },
        });
    });

PartnerDetails.ServiceController.js

define("JJ.PartnerDetails.PartnerDetails.ServiceController", [
  "ServiceController", 'JJ.PartnerDetails.PartnerDetails'
], function (
  ServiceController, PartnerDetails
) {
  "use strict";


  return ServiceController.extend({
    name: "PartnerDetails.ServiceController",


    // The values in this object are the validation needed for the current service.
    options: {
      common: {}
    },


    get: function get() {
      var Customer_id = this.request.getParameter('cust_id');
      return PartnerDetails.partner(Customer_id);
    },


    post: function post() {
      // not implemented
    },


    put: function put() {
      // not implemented
    },


    delete: function () {
      // not implemented
    }
  });
});

Template:

jj_partnerdetails_partnerdetails.tpl

<div class="case-tab-parter">
  <p class="case-tab-partner-heading">Contact your Sales Rep:</p>
  <p class="case-tab-partner-id"><span id="case-tab-partner-details">Name :</span> {{Partner_name}}</p>
  <p class="case-tab-partner-email"><span id="case-tab-partner-details">Email :</span> {{Partner_email}}</p>
  <p class="case-tab-partner-phone"><span id="case-tab-partner-details">Phone :</span> {{Partner_phone}}</p>
  <p class="case-tab-partner-phone"><span id="case-tab-partner-details">Customer Success :</span>
    (877) 689-4253</p>
</div>

Now add the below data-view in the Theme or extension where we need to display in the website.

<div data-view=“partner-details”></div>

Output:



Leave a comment

Your email address will not be published. Required fields are marked *