Today I had to troubleshoot why a refresh icon in a Smart Office Mashup was not refreshing, and after correcting it, I included the correction as a new predicate rule in my Mashup quality control tool to automatically spot similar errors in other Mashups.
IconButtons and CommandBarButtons
Here is a screenshot of the icon bar and its XAML code:
You can find more information about the Smart Office Design System’s Icons, IconButtons and CommandBarButons on norpe’s blog post.
The error
After some manual troubleshooting, I found that the icon was refreshing the wrong list, i.e. the Click event had the TargetName property set to the wrong <m3:ListPanel>, it was set to PurchaseOrderList (incorrect) instead of RequisitionList (correct). Probably the developer copy/pasted the code from another tab and forgot to change the TargetName. That’s hard to find, quick to fix.
<ds:CommandBarButton IconName="Refresh" ToolTip="{mashup:Constant Refresh, File=Mango.UI}"> <ds:CommandBarButton.CommandParameter> <mashup:Event TargetName="PurchaseOrderList" TargetEventName="Refresh" /> </ds:CommandBarButton.CommandParameter> </ds:CommandBarButton>
Finding other errors
Assuming the icons are grouped in a <StackPanel> followed by their <m3:ListPanel>, I can quickly find similar errors with the following XPath expression that lists all the icons TargetName:
//*[name()='ds:IconButton.CommandParameter' or name()='ds:CommandBarButton.CommandParameter']/mashup:Event/@TargetName
The Python code would be:
import os import glob import lxml.etree as etree for f in glob.glob(os.path.join(r'C:\BuyerPortal', '*.xaml')): tree = etree.parse(f) r = tree.xpath("//*[name()='ds:IconButton.CommandParameter' or name()='ds:CommandBarButton.CommandParameter']/mashup:Event/@TargetName", namespaces={'mashup': 'clr-namespace:Mango.UI.Services.Mashup;assembly=Mango.UI', 'ds': 'clr-namespace:Mango.DesignSystem;assembly=DesignSystem'}) for element in r: print(f, element)
Result
Then I visually inspect the result for outliers. In my case, I see the error I found earlier, and a new error I did not know about:
This is a quick way to help identify errors before users have to.
Future work
This still requires a visual inspection of the result. A better solution would be to calculate the distance between the icon and its target m3:ListPanel in the XAML tree, where a minimum distance would indicate a low probability of error, and a maximum distance would indicate a high probability of error.
That’s it!
Please comment, like, subscribe, share, author. Thanks for your support.
Related posts
- Mashup quality control #1 – <m3:ListPanel IsListHeaderVisible=”True”>
- Mashup quality control #2 – icon buttons
- Mashup quality control #3 – Mashups
- Mashup quality control #4 – XAML
- Mashup quality control #5 – MForms Bookmark URIs
- Mashup quality control #6 – MForms Automation URIs
Can we even handle the stream file from MNS206 using M3 scripting.
I need to read Customer Order from spool file OIS606, so let me know if it can be done.
Your help is highly appreciated
LikeLike
Hi Abhilash. With scripts anything is possible, even handle stream files. I don’t think .NET has an API to parse stream files, but it’s just text separated by lines, so you could easily find your customer number in there. The problem is how to get the stream file. I don’t know if M3 has an API or a web service for that. If not, you would have to connect to the file system of the server that contains the stream file; not ideal. When you find a solution, come write it on the blog.
LikeLike