Showing posts with label Web Services. Show all posts
Showing posts with label Web Services. Show all posts

Friday, February 19, 2016

Multi Org support for an Inbound Web Service

Let’s talk about a scenario today.

We have different end-users from India, USA etc logged into the web-portal for placing their orders and from the web portal they can register themselves. We have a “Create Account” Inbound Web Service which is used to create Accounts in Siebel. Whenever a new customer register himself, the web portal sends the information to AIA and then AIA invokes the Siebel’s “Create Account” WS.

The requirement is, if end-user belongs to India then the new Account created in Siebel, should be visible to Siebel users who belongs to “India” organization. If the end-user belongs to USA then the new Account created in Siebel, should be visible to Siebel users who belong to “USA” organization.

(Note: Web Portal is able to identify the Customer and able to send the Organization name to AIA and then AIA will send the Organization tag in inbound XML to Siebel)
<Organization>USA</Organization>
                                    OR
<Organization>India</Organization>

Solution:
Actually there are multiple ways to do it and with the help of Access Control mechanism which Siebel provides OOTB, this can be easily achievable.

Possible Solution 1:
Let’s take an example, there are two users. First one is assigned with the Position let’s say “Position India” and its corresponding Organization is set as “India”.
Second user is assigned with the Position let’s say “Position USA” and its corresponding Organization is set as “USA”.

Now, we all know that, as part of the OOTB solution, all the Account records created by first user on the UI will be visible in “All Contacts” view to all the application users who belong to “India”. Similarly, all the Account records created by second user will be visible in “All Contacts” view to all the application users who belong to “USA”.

The same concept can be used while invoking the Inbound WS. In Siebel, we can create two EAI user Profiles, one belongs to “India” and other one belongs to “USA” and pass-on the user credentials to the source system (AIA). While invoking the inbound WS, source system can use the appropriate login credentials according to the Organization name.

Possible Solution 2:
Siebel application user can hold multiple positions. If you are working in Siebel UI, you can navigate to Tools -> User Preferences -> Change Position view to change the position of the logged-in user. The moment you change the position, the new records that are created after that will hold the visibility according to the position’s organization.

Similarly, the same can be achieved while invoking the inbound WS. Assuming the EAI User profile, that is being used to invoke the inbound WS, will hold multiple positions let’s say 1) “Position India” and 2) “Position USA”.

Create a step in the workflow do the “Change Position”. I am not sure if there is any vanilla BS available to simulate the “Change Position” step that we can perform from UI, so here is the small script would do the task. Assuming “Organization” name is the input argument to the business service method:

function ChangePosition(Inputs, Outputs)
{
var sOrganization = Inputs.GetProperty("Organization");
 var oBO = TheApplication().GetBusObject("Change Position");
 var oBC = oBO.GetBusComp("Change Position");
 with(oBC)
 {
  ClearToQuery();
  ActivateField("Organization");
  SetViewMode(AllView);
  ExecuteQuery();
  var isRecord = FirstRecord();
  while(isRecord)
  {
   if(GetFieldValue("Organization") == sOrganization)
   {
    InvokeMethod("Change Position");
    break;
   }
   isRecord = NextRecord();
  }
 }
 oBC = null;
 oBO = null;
}

After this “Change Position” rest of the workflow execution would continue.



Tuesday, June 8, 2010

How to create Outbound Web Service in Siebel?

Today, lets talk about how we can invoke an Outbound Web Service from Siebel. In the last post we learned how to test the WSDL using SOAPUI and I will use the same WSDL today (CurrencyConverter.wsdl) as the sample wsdl in this post.

1. Import the WSDL into Siebel Tools.
Create New Object. File Menu -> New Object -> EAI -> Web Service



Select the WSDL file path



Business Service will get created with name "CurrencyConverter" and its method "CoversionRate"



ConversionRate method has got its Input/Output Arguments. The point to be notice here is the Integration Objects i.e. "ConversionRate" and "ConversionRateResponse". These are the external integration objects which defines the Request and Response XML of the Web Service.



If you query for Integration Object (Input): "ConversionRate", it will look like this:
and these are the two Input arguments of the Request XML of the Web Service.



Similarly, the Output IO will have a single output argument:



2. Create the UI. (Applet based on Opportunity BC)



3. Create Workflow to get the response from Web Service.






4. Call the Workflow from button click. To do this just create a BC User Prop on Opportunity BC

Named Method 1 : "Invoke", "INVOKESVC", "Opportunity", "Workflow Process Manager", "RunProcess", "'ProcessName'", "CurrencyConverter"

Where "Invoke" is Method Invoked from button on the opportunity applet.

5. Compile the objects and test.



After button click:




I am assuming that you are connected to internet while doing this test and this is how you can play with the live web service.

Tuesday, June 1, 2010

How to test a WSDL if it is working or not?

No matter if you are working in Siebel or not, if you are going to implement any Outbound Web Service, the first thing you wanna check if the WSDL file received from the 3rd party is working or not before you actually consume it and start the development.

Same is the case with Siebel Tools, you require to consume it in Siebel tools which will result in creation of Web Service (which is nothing but the business service of Class: CSSWSOutboundDispatcher) and its corresponding Integration Objects.

So, the best way is to have a 3rd party tools to quickly verify the response from the other system. I have came across lot many tools which solve this purpose but my favourite is SOAPUI and I really find it very handy for this purpose.

This post is related to the very first step that you do while creating the outbound web service. I have picked one WSDL freely available on "http://www.webservicex.net/WS/default.aspx"

Now, lets see how to do it step by step:

1. Save the WSDL from the following link:
http://www.webservicex.net/CurrencyConvertor.asmx?WSDL



2. Get the SOAPUI tools, available at the below link:
http://www.soapui.org/

3. Open SOAPUI and go to File Menu -> Preferences and make sure following check boxes should be unchecked.



4. Now open the WSDL, that you have saved in Step 1. File Menu -> New SOAPUI Project OR Press Crtl N





5. You will see "Currency Converter" Web Service and its associated method in the left (Navigator) panel. Double click on "Request 1". It will bring up the SOAP Request / Response page in the right panel. The request XML will look like this:



6. Input the necessary values in FromCurrecny and ToCurrency tags of the request XML and hit the Go Button. For Eg:



7. Here is the response XML I received:



8. This confirms that WSDL is correct and working fine.

We will see in the next post, how to implement an Outboound WebService in Siebel.

Stay Tuned !!