Maximo: Create Reports feature for custom apps - maximo

I have create a new custom view in Maximo DB, added it through the Database Configuration.
Created an application on top to display the data based on that view.
Added new signature option CREATEREPT to use default dialog to create reports (Ad Hoc Reports).
When I try to preview any report in that dialog, I get the following error
BMXAA8093E - The report could not be created and the cause of the
error cannot be determined. Try to create the report again, or contact
your system administrator.
null

It appears error BMXAA8093E can occur in a few different scenarios where a problem occurs with a report and a more specific explanation can't be provided:
https://www.ibm.com/support/pages/error-trying-save-qbr-or-create-new-report
I would suggest first confirming if a more specific error or any additional information is provided in the application logs. Following that you may want to verify that you have a Report Object Structure (ROS) for the object structure based on your custom view (i.e. in Integration -> Object Structures there is a record with "Consumed By" set to "Reporting" that has your object structure based on the custom view as a source object). Although you mentioned adding a Signature Option it is not clear from your description whether a ROS (mentioned earlier) exists and whether Administration -> Report Administration -> Set Report Object Structure Security has been used to tie that ROS to an existing security group or groups.

I had the same issue. Here is the solution that worked for me: go to Database Configuration, select your view, ensure that EXTENDSOBJECT is populated. In my case, it was not. You can fix this from backend. Let's assume your extended object is ASSET and your view is MYVIEW:
update maximo.maxobject set EXTENDSOBJECT='ASSET' where objectname = 'MYVIEW';
update maximo.maxobjectcfg set EXTENDSOBJECT='ASSET' where objectname = 'MYVIEW'; commit;
Do NOT forget to restart the app server.

Related

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

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')

Umbraco uCommerce Secure Trading - need to use OrderNumber instead of OrderGuid

I am trying to use umbraco with uCommerce.
I have implemented SecureTrading as Payment provider in uCommerce. Now I need a solution to use OrderNumber in place of OdrderGuid to be used to identify the PurchaseOrder.
Currently OrderGuid is being sento to SecureTrading & this is being displayed in SecureTrading Transactions section. And due to this identifying the order is really hard.
We have appropriate value in OrderNumber field of PurchaseOrder table & we want to Display that value in SecureTrading's Transaction section.
Any way to achieve this?
If I try to write my own payment provider code, it'll be very huge task, also we have set the SecureTrading environment accordingly to uCommerce default preference.
Immediate help is required.
For more Detail
I have developed a DLL for my own customization as menthioned in http://docs.ucommerce.net/ucommerce/v7.3/payment-providers/integrating-a-payment-gateway.html But, that also is not working. the custom Payment Provider added in code(DLL) is not visible in backoffice to change the Payment Provider. There are all old entries for providers.
Even nothing shows up in cms Admin section for uCommerce Settings.
Thanks
Hi you can create a derrived version of the PageBuilder which will send the parameters to SecureTrading.
There's a protected virtual method you can override called "GetParameters".
It returns a dictionary that holds everything that will be send to SecureTrading.
You can set the "orderreference" in the dictionary to OrderNumber. This originally holds the orderguid.
Don't forget to register your page builder in the IoC container.
http://docs.ucommerce.net/ucommerce/v7.5/extending-ucommerce/register-a-component.html
You need to override the component by reusing the ID that the page builder has, which is: "SecureTradingPageBuilder". When overriding the page builder you don't have to change anything in the back office.
This should fix your problem :)

Differential Query : how to distinguish change from creation

I use Azure AD Graph API differential query to detect changes in my Azure AD.
For each result node of type User or Group how can I distinguish if the object is new or only updated?
I use the ocp-aad-dq-include-only-changed-properties option to obtain only the changed properties. But what happens if all the properties have been changed? I received all the properties as if the object is new.
You have to save all existing objects in a storage, then when a change occurs, check if the storage contains this object and update the storage (add or delete the changed object if needed)
This is the only way I found on my research. If you find more simle solution, please post it here as an answer
Not familiar with Azure (but familiar with AD).
Some attributes can't be change once created, but must be set on creation.
e.g. objectCategory
So if it exists in result -> creation.
Not exist -> update.
One case I am not sure about is the deletion case.
Depending whether Recycle Bin feature is enabled (do Azure have this?), objectCategory may be cleared on deletion.
Sorry, I will leave this for you to test.

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!

How to find which security permission is preventing a user from doing something

Dynamics CRM 2011 on premise.
I have a plugin that adds some buttons to the ribbon on the case/incident form.
Different users have different security permissions.
The buttons are enabled for all users.
When some users press the buttons they perform the expected operations.
When other users press the buttons they do not seem to do anything.
Other than permissions, I think everything else is the same for the users.
How can I find which permission(s) are causing the problem?
(Also, shouldn't CRM say something if permissions are blocking a user from doing something? We don't get an error.)
The Xrm Tool Box has an access checker that would help in this situation.
The way security works in CRM when querying data is that you do get an exception if the user attempts to perform a select on an entity that they have no read rights at all for. But, if the use has rights to view only records that they own, they'll get an empty result set if they attempt to query records they don't own. I'm guessing that's what's going on here, is that they're attempting to query data that the have read rights for, but not at the Organization level, or whatever the exact level that they need.
From Suumit Bhatanagar at https://community.dynamics.com/crm/f/117/p/113149/228873.aspx
You may collect verbose level of traces , would direct you in the right direction. Simply reproducing the issue by clicking on the button and then stop the traces.
For traces , you may look into : http://support.microsoft.com/kb/907490
From DavidJennaway at http://social.microsoft.com/Forums/en-US/55c22571-0187-4a64-9cc1-94954fa8bdf7/how-to-find-which-security-permission-is-preventing-a-user-from-doing-something
Enable tracing and the trace log will indicate the privilegeid and systemuserid - you can then lookup the privilegeid in the privilege entity.
Be aware that the trace log will record all instances where a user doesn't have permission - this includes the scenario where CRM checks if a user has any permission on an entity to decide if the entity should be shown in the UI
From Roshan Mehta at http://social.microsoft.com/Forums/en-US/55c22571-0187-4a64-9cc1-94954fa8bdf7/how-to-find-which-security-permission-is-preventing-a-user-from-doing-something
Check the Event Viewer. This usually gives sufficient information about missing privileges when a plugin fails to run under user context.
Alternatively, you can run the plugin under SYSTEM context in which case this error will not occur. To do this, pass a null value into the CreateOrganizationService method when instantiating service objects in your plugin.
From Imran I Abbasi at http://social.microsoft.com/Forums/en-US/55c22571-0187-4a64-9cc1-94954fa8bdf7/how-to-find-which-security-permission-is-preventing-a-user-from-doing-something
David is right, there isn't any easier way to get to the root of your issue. Enable tracing and then use privilegeId (a GUID) from tracing file against Privilege entity in database to get details of missing privilege. To simplify your quest, you can use TraceLogViewer to filter your log file and get only the errors. Here is the link: Trace Log Viewer
And here are the steps to enable tracing in crm 2011
here are the steps
1- -> Start -> run -> regedit.exe
2- HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > MSCRM
3- Add new keys
TraceEnabled
TraceRefresh
DWORD, value = 1

Resources