cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

Community Tip - You can Bookmark boards, posts or articles that you'd like to access again easily! X

How to invoke a service from subscription or from another service?

Duartefe
11-Garnet

How to invoke a service from subscription or from another service?

Hi Everyone,

 

I have a data change event which trigger a subscription. In this subscription I would like to invoke a service which will be bound to a widget. I am also thinking that I can do it directly in the service code but I could not do that.

I tried use snippets which just insert "me.myservice" and it does not work and I also tried "thing["mything"].myservice();" but also does not work.

 

Any help on that?

 

Thanks,

Felipe Duarte 

1 ACCEPTED SOLUTION

Accepted Solutions
vxavier
13-Aquamarine
(To:Duartefe)

You can make the Catch return an output in the service. 

 

But think more it has to be the same type of the main output. If it is a string or number it is easy, but if it is an infotable... it becomes hard.

 

If the outputs is nothing, you can make the output a boolean. True for the code execute without errors and false with errors. 

View solution in original post

9 REPLIES 9
vxavier
13-Aquamarine
(To:Duartefe)

The subscription will run the service internally, in the mashup you have to call it again. 

 

If you run a subscription it will not automatically update a mashup. 

 

Can you explain exactly the flow of your data and services and how do you wanna it do be updated ?

 

The right way to call the service of an external thing is: "Things["mything"].myservice();"

Hi Vinicius,

 

Let's make it simple. I need to popup a message when I got a error with a service. I want to use the navigation widget to do it. So, in my code I have a try/catch where when it got a error it runs what is inside de catch (I did some test with logger and it works). Then I have a service which will be bound with the navigate bind after the service is invoked. This is the point, I need to invoke the service which will trigger the navigation widget.

The service where I have the try catch is a service which create a infotable from csv.

 

Was I clear enough?

 

Thanks,

Felipe Duarte

vxavier
13-Aquamarine
(To:Duartefe)

Hi Felipe,

 

You can use Validator Widget.

 

After you call your service in your mushup you pass the output for a validator widget, if the output is equals to the error log message, the validate will fire the event true, that you can bind with the navigate link.

 

Hope it helps,

Vinicius.

 

Hi Vinicius,

 

It could help but I need to understand better what do mean by output error message? Comes from mashup log or Monitor?

 

Could you please detail a little bit more this?

 

Thanks,

Felipe Duarte

vxavier
13-Aquamarine
(To:Duartefe)

You can make the Catch return an output in the service. 

 

But think more it has to be the same type of the main output. If it is a string or number it is easy, but if it is an infotable... it becomes hard.

 

If the outputs is nothing, you can make the output a boolean. True for the code execute without errors and false with errors. 

Hi Vinicius,

 

It is always for the most difficulty way because my main output is Infotable.

The expression can be a test for a property?

Example:

If(myproperty==true){

(???)

} else {

(???)

}

How this code expression should be?

 

Thanks a lot for your help!

khayes1
13-Aquamarine
(To:Duartefe)

Hi,

you could change the datashape that your service returns. so instead of having it return just an infotable you have a shape that contains an infotable and an error code.

 

i.e.

myDataShape

{

     myInfotable,     //infotable custom datashape

     errorFlag         // boolean 

}

You could then tie the 'errorFlag' to the validator widget, which in turn could be used to initiate the navigation. You just need a little more care when setting the bindings in the mashup in the composer

 

K

 

     

Hi K,

 

Thanks for you reply.

 

For sure this suggestion about use "errorFlag" is good. I did not know that but since I could make it using a property I will let it as is. But when it become to be more a enterprise system maybe this I will put this idea in place.

 

Best Regards,

Felipe Duarte

Hi Vinicius,

 

First of all, it works :)

 

So, I use the catch return to change a Boolean property to true. Then I used this property to bind in validator widget and use the property as input and expression. Bound all needed to the validator and navigate widget and got the expected result which was a popup window message.

 

Thanks a lot for your help and suggestion!

 

Best regards,

Felipe Duarte

Top Tags