How to dynamically pass sql in query in Launch in context? - maximo

I need to have a button in custom Location app, upon clicking which will take me to workorder application list tab with all the workorders created on the assets of the particular location.
I am using launch in context.
I tried using WF, but the workorder is opening in main tab instead of List tab.
Work flow used
Interaction Node details
after routing, wotrack is opening like "http://hostname/maximo/ui/?event=loadapp&value=wotrack&additionalevent=changetab&additionaleventvalue=List&uniqueid=72&uisessionid=35&_tt=6e2h84jnc2qpnu9tohvo04qpdp"
how it is fetching workorder with unique id 72?

I think Launch in Context is the wrong tool. Launch in Context is used for launching the user from Maximo into some external website / application, using some data from Maximo to provide some context to that application.
Instead, it sounds to me like you should use a Workflow process with an Interaction Node. In the Interaction Node, you can specify the Application and tab to take the user to and the Relationship from the Main Object of the current app to use to find the record(s) that should be loaded in the destination app for the user.

I don't remember how to set up Launch in Context, but this web page on the URL parameters you can use should help on that part at least.
http://maximodev.blogspot.com/2012/04/maximo-urls.html
Specifically, the example using the SQL query is probably what you need, since you want to display the records (workorders) associated with the records (assets) associated with the record (location) you have. (The earlier outline of the article has the wrong URL values for the "Perform a query using a where clause" section, but the example near the bottom has the correct setup.)
http://localhost/maximo/ui/maximo.jsp?event=loadapp&value=wotrack&additionalevent=sqlwhere&additionaleventvalue=status%20in%20('WAPPR')
I think if you give the Launch in Context the part of that URL after the hostname, it will try to load it as a page at the current, which would end up taking you to exactly where you want to be, regardless of the public hostname of the server.
maximo/ui/maximo.jsp?event=loadapp&value=wotrack&additionalevent=sqlwhere&additionaleventvalue=status%20in%20('WAPPR')

Related

How to use action from another web application object

I'm using Blueprism and I have to create a robot for a web application. So far I've had all of my subpages spied in one object, but now I must split that object into 5 different objects, each object for one subpage for example :
Now I got this : Web App - Object and I must split it into
Web App - Login Page
Web App - Main Page
Web App - Settings Page etc.
Everything worked when I had just one object but now it's not.
I spied elements again for my new objects in my application modeler.
Also I tried the "Sharable option" and of course published all of my pages.
For example my Web App - Main Page action cannot be used by my Settings Page. I can choose it from the list but then I get this error :
Internal : Failed To perform Step 1 In Navigate Stage 'Click' on page 'click' - Not Connected
What should I do and what should I write in application modeler when I'm asked for the URL of my start page? I've tried the main url for example web.com, my subpages url : web.com/main and also I tried to leave it blank.
Please help me to solve this problem
When splitting your functionality across multiple objects, it's important to note how Blue Prism handles connections ("attachments") to individual applications.
When a Business Object is leveraged to Launch a business application, the attachment to the application itself is (normally) handled in the background by Blue Prism. When another business object is created, the attachment isn't handed off to the secondary object(s). This is clearly laid out in the Blue Prism Object Design Guide document, section "4.2.4. Attaching":
An object must be attached to the application before it can be used
to automate it. When an object launches an application, it is
automatically attached to that application. Therefore, the ‘Basic
Actions’ object does not require an ‘Attach’ action. The remaining
objects that wish to work with an application that is already launch
must first attach to the application.
The solution to this object design paradigm is to include a non-published "Attach" function in each of the secondary objects that's called at the start of each of the secondary object's actions. From the aforementioned guide:
If an object attempts to attach to an application when it is already
attached, an error will result. Therefore, when building an ‘Attach’
action, it is best practice to first detect if the object is already
attached to the application. A typical ‘Attach’ action may look like
this
By using the approach above, every other action within the object can call the ‘Attach’ page as is its first stage to
ensure the action is ready to work with the application e.g.
If you are already launched the application then no need to keep url to rest of the Objects , just in application modeler u check the checkbox for application is already running, after that in each and every page attach the application and in the attach page keep the web page(all the navigating pages) names in the collection and passing it as a webtitle parameter to the attach stage
This works fine.

Disable the edit of ?id= in url jsf

before write the question sorry for my english. My question is this:
I have an web application in jsf, the application have new, edit and delete Categories, outgoings, Budgets, users, etc.
When open the edit page i have the url like this:
http://localhost:8080/Practica3/faces/usuarios/edit.xhtml?id=2
the problem is if the user change the number 2 for another number, and the another number exists in the dababase, the page change the data of the id 2 to the data of the new id.
The problem is if the id number X is of a data of another user, and the user that change the id is not in conditions to see that data.
How disable the edit of the id, or denied to show the data to the another user?
Thanks, and i hope have a response.
Just check in service layer if the current user is allowed to edit the requested entity. If not, then throw some security exception for which you could if necessary configure a custom error page in web.xml.
The technical problem has nothing to do with HTTP/JSF. If you "fix" it alone in JSF side, then you still have a gaping security hole in service layer which would affect any other frontend using it. The frontend is not responsible for business restrictions in service layer itself.
The problem is not stopping the editing of the ID. That is on the client side/browser and you cannot stop this value from being edited.
You need to implement propery Access Security Controls. When you get any response back, you need to check if the user can perform the action they specified (read, update, delete, etc.) as well as checking to make sure they have permission to the data they want to perform the action on.
These two topics are on the OWASP Top 10:
A4-Insecure Direct Object References
A7-Missing Function Level Access Control
The pages will tell you what the problem is, mitigation stragegies, and different ways of testing for that in your application.
I would also become familiar with the other Top 10 categories (this is not an all inclusive list but a good starting point).

Liferay database table work flow?

I am new to Liferay. Now I need to create the flow chart which has the Liferay table work flow in following scenarios,
1) What are the list of table will reflect/update if we create the site admin?
2) What are the list of table will reflect/update if we create the site?
I tried by opening database tables and noticed that USER_, CONTACT_ will reflect, But I need list of all the related tables which will reflect when we create the site and siteadmin? I am using Liferay 6.2 version.
Thanks in advance.
When you want to know the internals of any system it is always best to check the relevant source-code. So in this case you can check the source-code for those classes which are used for CRUD operations on User and Site.
1) What are the list of table will reflect/update if we create the site admin?
Site-administrator is a Role, which can be applied to a User created in Liferay.
So if you want all the tables that are created from User-creation till User is assigned the Site-administrator role for a particular site, there here are some which I can recollect:
User_ (Obvious)
Contact_ (not so obvious :-) )
Group_ (Users are also created as a record in this table since Users have public and private pages)
Address (if you add an address)
Phone (if you add a Phone)
Users_Roles (Power user role is assigned by default)
UserGroupRole (user and site-role relationship, Site-administrator is a Site-role)
Users_Groups (user and site relationship)
For others you should refer the source-code for UserLocalServiceImpl, RoleLocalServiceImpl and GroupLocalServiceImpl, check the relevant methods prefixed add, update etc.
The corresponding service.xml for these module would reveal the database tables being used.
2) What are the list of table will reflect/update if we create the site?
Sites are nothing but Groups in Liferay. So its obvious Group_ table is playing a big role.
Other tables also depend upon what configuration you are doing while creating a Site.
Then there would be other tables like Layout when you start creating pages for a Site.
I would strongly encourage to go ahead and explore the source code for the classes and you would understand the flow - when and what tables are affected.
Here is some convention which might help you traverse the source-code, almost every *LocalServiceImpl is associated with a *Model like UserLocalServiceImpl with UserModel and almost every *Model has a corresponding database table with the same name.
Also the name of the functionality would in most cases hints at what service classes are being used to connect to database, like adding a User would hint at using UserLocalServiceImpl.
Hope I have understood your question and have been able to give some proper direction.
If you want to know this because you also want to write to these tables: Don't go there! You should purely use the API to change the data that Liferay stores. Otherwise you will run into disasters some time in the future - promised.
For just getting the SQL commands that Liferay actually uses, configure portal-ext.properties and change this default value:
hibernate.show_sql=false
Then go to "Server Administration/Log Levels" and add a new category "org.hibernate.SQL", configure it to the level DEBUG. Then the results show up in the logs. Note that this log configuration is transient and will be reverted on next server start. If you want the setting to be persistent, you'll need to go into Liferay's log4j configuration files.
Remember: You don't want to write to the tables ever. Promise!

Passing data to html web resource via code, crm 2011

I've put an html web resource on my contract form and would like to pass via the data= parameter some information that comes from a plugin that is registered for PostRetrieve. I know how to set static info for the web resource, but I can't find in the SDK how to set it dynamically from a plugin. Is this possible?
Background info
I'm new to developing for CRM so it's quite possible that I'm not taking the most effective route in building this project. Let me give you some more detail: when a contract is opened in CRM, my plugin retrieves some business information from a different sql server and fills in a few of the contract fields. This is working fine. However, I would also like to display a table of usernames and links that come from the remote sql server on the crm contract form. Because I did not want to save this info in the contract entity and because there are links I want the user to click on, I thought a web resource displayed on the form was the best implementation.
My thought was to pass all the data to the web resource via the data= parameter and then parse and build a table using javascript in the web resource.
What seemed to work best:
The plugin retrieves the info from the remote sql server, serializes the generic list to json and puts it in a hidden text field on the form.
The html web resource gets the content of the hidden field, does an eval, and builds a table.

How do you implement users and group security in a web application?

using php if that matters.
If you create a website that has users and groups. Where do you put this in the web application? Do you just put a function at the top of every page (pseudo):
if someone is in a group then they can see this page
or
if someone is in this group they can see this button
That sure seems wrong. I wouldn't want to edit the web app code just to change who can see what group-wise. I'm not sure what I should do or how to implement something like this.
Thanks.
In MySQL, I always create these 4 tables: users, user_groups, permissions and user_groups_permissions which are linked using Foreign Keys.
So, user A can be in a user group B, which this user group permissions are in user_groups_permissions.
Now, I just do a INNER JOIN on this 4 tables (or better, three: users, user_groups_permissions and permissions), the results are permissions that user have. all we need is selecting permissions.key by INNER JOIN.
Now, before processing request, I need to check that Client::has_permissin('send_post') returns true or not. And better, also on top of each user-group-related function.
Note: Client is a class that loads all user permissions just one time, before processing request, and then uses that permissions for whole request-life-time, without needing to access to database several times in that request. Use static methods and $permissions property for this class so you never need to send it's object over your applications classes/methods/functions :)
You can have a utility function which takes user id and group code and return true or false.
You can use that utility function as pseudo at the top of each page and the same function also be used to hide or show sections in your page.
If your web application is in MVC, embed user authorization logic in your controller.

Resources