MVP Summit 2014


Every year, Microsoft invites recipients of MVP awards to the Microsoft campus in Belleview Washington for the MVP Global Summit.  The Summit is an exclusive event for MVPs and RDs to network with each other as well as Microsoft team members.  It is also a great opportunity Microsoft product teams to benefit from ideas of people who are actively working with the products in diverse environments and get direct feedback on future plans. 

This year was AMAZING!  It was impressive to see what Microsoft has planned for Visual Studio and Blend in the development world.  It is a great time to be a developer.  Most of what we saw was under NDA so for now, you will just need to trust me that you will like what is coming.  What I can say is that the messaging around Universal Apps being the future model for app development of any type was clear and consistent. 

What really jazzed me this year is the direction that Microsoft has taken with Windows Embedded and in particular the “Internet of Things”.  Coupled with Microsoft’s Cloud Platform, we got to see many examples of where Microsoft is working to enable very small devices to become our front line in data gathering and notifications.  The Embedded team members talked about some of their work to create intelligent systems in retail and healthcare. These systems are multiple device types that work together to enable workers to focus more on the clients and create better more effective experiences.  In the past, this was done with a lot of disconnected systems with different programming models which leads to bugs and difficult systems to manage and update.  It is truly is starting to look like all the pieces are coming together in a unified model and Microsoft gets how important it is.

Microsoft spoke directly to both the current Embedded clients as well as the new hobbyist and “Maker space” folks.  They highlighted the spaces that they are investing in with amazing potential to empower people to work more efficiently and effectively .  While their message was clear and consistent that they very excited about this space in the future and want to serve all these communities, they were careful not to put any of them in a box.  In other words, although they are working on paths that they feel are beneficial to each community, they encouraged cross experimentation and asked for any and all feedback.  It is clear that the Embedded and IOT teams are excited about technology and innovation from all directions and are working with many consortiums and organizations to enable innovation.

I am pretty new to this space so I am a little more NDA aware than others may have to be and will hold back much of what I saw at the Summit.  I hope to share more blog posts as I actually play with this stuff and more new technology releases are announced.

If you want to learn more about some of the terms I have used, please visit Internet of Things  and Windows Embedded .

To keep up with the latest IOT announcements from Microsoft, follow the IOT team blog or on Twitter, follow @IOTDan and @IOTPranish

If you are in DFW and looking for a space to have access to equipment and be inspired, check out the Dallas Makerspace .

author: T | Posted On Monday, November 10, 2014 8:58 AM | Comments (0)

Blend for Visual Studio 2013 Prototyping Applications with SketchFlow


SketchFlow enables rapid creating of dynamic interface mockups very quickly. The SketchFlow workspace is the same as the standard Blend workspace with the inclusion of three panels: the SketchFlow Feedback panel, the SketchFlow Animation panel and the SketchFlow Map panel.

By using SketchFlow to prototype, you can get feedback early in the process. It helps to surface possible issues, lower development iterations, and increase stakeholder buy in. SketchFlow prototypes not only provide an initial look but also provide a way to add additional ideas and input and make sure the team is on track prior to investing in complete development.

When you have completed the prototyping, you can discard the prototype and just use the lessons learned to design the application from or extract individual elements from your prototype and include them in the application. I don’t recommend trying to transition the entire project into a development project.

Objects that you add with the SketchFlow style have a hand-sketched look. The sketch style is used to remind stakeholders that this is a prototype. This encourages them to focus on the flow and functionality without getting distracted by design details.

clip_image001[4]

The sketchflow assets are under sketchflow in the asset panel and are identifiable by the postfix “–Sketch”. For example “Button-Sketch”.

clip_image003[4]

You can mix sketch and standard controls in your interface, if required. Be creative, if there is a missing control or your interface has a different look and feel than the out of the box one, reuse other sketch controls to mimic the functionality or look and feel. Only use standard controls if it doesn’t distract from the idea that this is a prototype and not a standard application.

The SketchFlow Map panel provides information about the structure of your application. To create a new screen in your prototype: Right-click the map surface and choose “Create a Connected Screen”. Name the screens with names that are meaningful to the stakeholders.

clip_image005[4]The start screen is the one that has the green arrow. To change the start screen, right click on any other screen and set to start screen. Only one screen can be the start screen at a time.

Rounded screen are component screens to mimic reusable custom controls that will be built into the final application.

You can change the colors of all of the boxes and should use colors to create functional groupings.

The groupings can be identified in the SketchFlow Project Settings.

clip_image006[4]

To add connections between screens in the SketchFlow Map panel. Move the mouse over a screen in the SketchFlow and a menu will appear at the bottom of the screen node. In the menu, click Connect to an existing screen. Drag the arrow to another screen on the Map.

clip_image008[4]You add navigation to your prototype by adding connections on the SketchFlow map or by adding navigation directly to items on your interface. To add navigation from objects on the artboard, right click the item then from the menu, choose “Navigate to”. This will expose a sub-menu with available screens, backward, or forward.

When the map has connected screens, the SketchFlow Player displays the connected screens on the Navigate sidebar. All screens show in the SketchFlow Player Map. To see the SketchFlow Player, run your SketchFlow prototype.

clip_image010[4]

The Navigation sidebar is meant to show the desired user work flow. The map can be used to view the different screens regardless of suggested navigation in the navigation bar. The map is able to be hidden and shown.

As mentioned, a component screen is a shared screen that is used in more than one screen and generally represents what will be a custom object in the application. To create a component screen, you can create a screen, right click on it in the SketchFlow Map and choose “Make into component screen”. You can mouse over a screen and from the menu that appears underneath, choose create and insert component screen. To use an existing screen, select if from the Asset panel under SketchFlow, Components.

You can use Storyboards and Visual State animations in your SketchFlow project. However, SketchFlow also offers its own animation technique that is simpler and better suited for prototyping.

The SketchFlow Animation panel is above your artboard by default. In SketchFlow animation, you create frames and then position the elements on your interface for each frame. You then specify elapsed time and any effects you want to apply to the transition.

clip_image012[4]

clip_image013[4]The + at the top is what creates new frames. Once you have a new Frame, select it and change the property you want to animate. In the example above, I changed the Text of the result box. You can adjust the time between frames in the lower area between the frames. The easing and effects functions are changed in the center between each frame. You edit the hold time for frames by clicking the clock icon in the lower left and the hold time will appear on each frame and can be edited. The FluidLayout icon (also located in the lower left) will create smooth transitions.

Next to the FluidLayout icon is the name of that Animation. You can rename the animation by clicking on it and editing the name. The down arrow chevrons next to the name allow you to view the list of all animations in this prototype and select them for editing.

To add the animation to the interface object (such as a button to start the animation), select the PlaySketchFlowAnimationAction from the SketchFlow behaviors in the Assets menu and drag it to an object on your interface. With the PlaySketchFlowAnimationAction that you just added selected in the Objects and Timeline, edit the properties to change the EventName to the event you want and choose the SketchFlowAnimation you want from the drop down list.

clip_image015[4]

You may want to add additional information to your screens that isn’t really part of the prototype but is relevant information or a request for clarification or feedback from the reviewer. You do this with annotations or notes. Both appear on the user interface, however, annotations can be switched on or off at design and review time. Notes cannot be switched off.

To add an Annotation, chose the Create Annotation from the Tools menu. The annotation appears on the UI where you will add the notes.

To display or Hide annotations, click the annotation toggle at the bottom right on the artboard clip_image016[4]. After to toggle annotations on, the identifier of the person who created them appears on the artboard and you must click that to expand the notes.

To add a note to the artboard, simply select the Note-Sketch from Assets ->SketchFlow ->Styles ->Sketch Styles. Drag and drop it to the artboard and place where you want it.

When you are ready for users to review the prototype, you have a few options available. Click File -> Export and choose one of the options from the list: Publish to Sharepoint, Package SketchFlowProject, Export to Microsoft Word, or Export as Images. I suggest you play with as many of the options as you can to see what they do.

clip_image017[4]

Both the Sharepoint and Packaged SketchFlowProject allow you to collect feedback from one or more users that you can import into the project. The user can make notes on the UI and in the Feedback area in the bottom left corner of the player.

clip_image019[4]

When the user is done adding feedback, it is exported from the right most folder icon in the My Feedback panel. Feeback is imported on a panel named SketchFlow Feedback. To get that panel to show up, select Window -> SketchFlow Feedback. Once you have the panel showing, click the + in the upper right of the panel and find the notes you exported.

clip_image021[4]

When imported, they will show up in a list and on the artboard.

To document your prototype, use the Export to Microsoft Word option from the File menu.

That should get you started with prototyping.

author: T | Posted On Sunday, August 10, 2014 8:23 AM | Comments (0)

Computer Visionaries 2014 Kinect Hackathon


A big thank you to Computer Vision Dallas and Microsoft for putting together the Computer Visionaries 2014 Kinect Hackathon that took place July 18th and 19th 2014.  Our team had a great time and learned a lot from the Kinect MVP's and Microsoft team.  The Dallas Entrepreneur Center was a fantastic venue. In total, 114 people showed up to form 15 teams.

Burger ITS & Friends team members with Ben Lower:  Shawn Weisfeld, Teresa Burger, Robert Burger, Harold Pulcher, Taylor Woolley, Cori Drew (not pictured), and Katlyn Drew (not pictured)

072214_1408_ComputerVis5.jpg

We arrived Friday after a long day of work/driving.  Originally, our idea was to make a learning game for kids.  It was intended to be multi-simultaneous players dragging and dropping tiles into a canvas area for kids around 5 years old. We quickly learned that we were limited to two simultaneous players. After working on the game for the rest of the evening and into the next morning we decided that a fast multi-player game with hand gestures was not going to happen without going beyond what was provided with the API. If we were going to have something to show, it was time to switch gears.

The next idea on the table was the Photo Anywhere Kiosk. The user can use voice and hand gestures to pick a place they would like to be.  After the user says a place (or anything they want) and then the word "search", the app uses Bing to display a bunch of images for him/her to choose from. With the use of hand gesture (grab and slide to move back and forth and push/pull to select an image) the user can get the perfect image to pose with. I couldn't get a snippet with the hand but when a the app is in use, a hand shows up to cue the user to use their hand to control it's movement.

Once they chose an image, we use the Kinect background removal feature to super impose the user on that image. When they are in the perfect position, they say "save" to save the image.

Currently, the image is saved in the images folder on the users account but there are many possibilities such as emailing it, posting to social media, etc..

The competition was great and we were honored to be recognized for third place.

kinectEvent.pdf.jpg

Other related posts:

A couple of us are continuing to work on the kid's game and are going to make it a Windows 8 multi-player game without Kinect functionality. Stay tuned for more updates.

author: T | Posted On Friday, August 8, 2014 11:06 AM | Comments (0)

Windows 8 Microsoft VPN Error 850


Recently I attempted to connect to a Windows VPN with windows 8 and received an error “Error 850: The Extensible Authentication Protocol type required for authentication of the remote access connection is not installed on your computer.”

I had set up the VPN the same way it was setup on Windows 7 but could not get it working.  For me, the error was quite misleading and an internet search on the error led me to believe I needed a certificate.  It turns out, I just needed to change my settings and allow the proper protocols.

To do this, go into the control panel under Network and Internet and choose Network and Sharing Center.  In the Network and Sharing Center, click change adapter settings.  You will see something similar to the screen below.

image

 

Right click the connection you setup and choose properties.  From the properties window, click the Security tab.

image

Your windows should look something like above.  In my scenario, Use Extensible Authentication Protocol was selected and I needed to change that to Allow these protocols and select the CHAP.

 

That worked for me.  Hopefully you find that helpful.

author: T | Posted On Wednesday, July 9, 2014 3:07 PM | Comments (0)

Setting a WPF Image programmatically


Here is one way to mapping images using code behind in WPF

so.ImgMap.Source = new BitmapImage(new Uri(String.Format("../{0}/{1}",ImagePath,ImageName),UriKind.Relative));
In this example, Images must have their Build Action Property set to Resource or Content and not Embedded Resource in Visual Studio.
image
 
There are many options for the Build Action Property and the help file explains them very well.  For this example, the two that matter are Embedded Resource which is the default and Content.

Content - The file is not compiled, but is included in the Content output group. For example, this setting is the default value for an .htm or other kind of Web file or in our case where we want to include the file as a default but the user can still reach it if they know how.

Embedded Resource - This file is embedded in the main project build output as a DLL or executable. It is typically used for resource files.

author: T | Posted On Monday, June 30, 2014 12:24 AM | Comments (0)

Great resources for educators


current as of 5/20/14.  In no particular order. 

Virtual Academy Free Microsoft Training Delivered by Experts
Dream Spark Library of software and resources for students
Azure in Education Microsoft provides grants for educators wanting to use Azure in their curricula.
Woot Studio Tower Game Starter Kit and Platformer Starter Kit
Nokia DVLUP Nokia DVLUP.  Have fun, earn rewards, build new ideas.
Faculty Connection Faculty Resources and community
Microsoft IT Academy academic institutions and their educators, students and staff get digital curriculum and certifications for fundamental technology skills
Biz Spark not really for the educators but in continuing education can be  of interest to the students
   
   
   
   
   
   
   
   
   
   
   
   

author: T | Posted On Tuesday, May 20, 2014 10:51 AM | Comments (0)

WPF - Create a custom toggle control with touch and binding support with Blend for Visual Studio 2013


Create a new wpf user control with the following steps •1. Import Photoshop file to get look and feel •2. Create control and template using standard toggle button •3. Add touch support •4. Add dependency properties for binding support

author: T | Posted On Saturday, December 7, 2013 10:31 PM | Comments (1)

MVP Summit November 2013


This years MVP Summit II was fantastic.  It was great to see people that I don’t get to chat with often enough, hear about things in the pipeline, and learn about things other people are doing.  While a lot of it is under NDA, there were also many parts that are not under NDA that I really enjoyed and wanted to share.

Lucian Wischik  held a great session on Async Best Practices – For Using Async, and for creating Async APIs.  This is a must for anyone who has not seen Lucian talk about Async… even if you think you know it well.  His blog post can be found here (and please stop using async void).

I had to go download the bits for Prism for WinRT after hearing about it from Blaine Wastell and Francis Cheung.  You can check it out here.

It was great to be one of the first to hear about the Patterns and Practices Open Development Model for the app blocks that make up the Microsoft Enterprise Library.  To learn more, follow this link .

Look for me to release some future blog posts on Unity. 

On the education side of Microsoft, I was introduced or re-introduced to https://www.facultyresourcecenter.com (I keep wobbling back and forth on if I have been there before or not).  It is a fantastic tool for professors to both find and post content.

It was a great time and I really think Microsoft is pushing in the right direction. Now I have to get back to work.

author: T | Posted On Sunday, November 24, 2013 1:53 AM | Comments (0)

Dynamics NAV 2013 consuming a rest web service using DotNet DataTypes


In this example we will use Melissa Data to validate addresses (http://www.melissadata.com/) but you can modify the example to use any service.  For this example, the goal is to use the Melissa data rest based web service to verify a customer address in NAV and get the results back.  What is done with those results will be up to the developer. 

There is an assumption that you know enough about C/AL code and different object types to know where you are trying to put the code.

First thing to do is to setup the variables that will be used. 

Name DataType Subtype
xml DotNet System.Xml.XmlDocument.'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
xmlnodelist DotNet System.Xml.XmlNodeList.'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
i Integer  
xmlnode DotNet System.Xml.XmlNode.'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
results Text  
j Integer  

DotNet Datatypes are relatively new.  To pick the ones that you want to use, see the instructions below.  These instructions show what it looks like after all options have been chosen.  As you walk through it the first time, many of the fields will be blank until the previous option has been clicked.

Here is how you would setup the first item in our variable list above.  This is the variable we called xml and the subtype is shown as System.Xml.XmlDocument.'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.  When you break that up, what we are looking for is the System.XML 2.0.0.0 Assembly and the XmlDocument Type within that assembly.

image

  1. 1.  From the C/AL locals or globals screen, add a new item.  Give it a variable name and choose DotNet under DataType.  At this point, the Subtype will be blank.  Click the ellipse in the Subtype feild to assign the appropriate .net data type (the ellipse is shown under the 1 in the image above).
  2. 2.  The .NET Type List will appear.  Click the up arrow in the Assembly field.
  3. 3.  This will open the Assembly List window.  Chose the .NET tab.
  4. 4.  In our case, find System.Xml.  Here, we chose to use the 2.0.0.0 version. Click OK.  Note: You are welcome to experiment with the 4.0.0.0 version or any other .NET types that may do what you want.
  5. 5.  After choosing OK on the Assembly that you want, the list of Types for that Assembly will appear in the  .NET Type List.  Find the System.Xml.XmlDocument and click OK.

 

Follow the same steps for xmlnodelist.  In that case, it shows System.Xml.XmlNodeList.'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' so you will want the System.XML Assembly 2.0.0.0 then the XmlNodeList Type.  Use the same type for another variable called xmlnode.

First setup the XML Document and call Melisa data with the correct URL to get the results.


  xml := xml.XmlDocument();
  Customer.GET("Customer No.");
  xml.Load('https://addresscheck.melissadata.net/v2/REST/Service.svc/doAddressCheck?id='+MelisaDataCustomerId+'&opt=true&comp=&u=&a1='+Customer.Address+'&a2='+Customer."Address 2"+'&ste=&pmb=&city='+Customer.City+'&state='
    +Customer.County+'&zip='+Customer."Post Code"+'&p4=&ctry=&last=');

After that, the idea is to read the xml and parse it to get the values out.


xmlnodelist := xml.SelectNodes('//*');
IF( xmlnodelist.ToString()<>'') THEN
BEGIN
j:=xmlnodelist.Count; 

FOR i := 0 TO xmlnodelist.Count - 1 DO
BEGIN
  xmlnode := xmlnodelist.Item(i);
  CASE xmlnode.Name OF
    'Value': [Field or variable to store value]:= xmlnode.FirstChild.InnerText;
  // add more cases
  End
End

 

The basic code for this example looks like this:



 xml := xml.XmlDocument();
  Customer.GET("Customer No.");
  xml.Load('https://addresscheck.melissadata.net/v2/REST/Service.svc/doAddressCheck?id='+MelisaDataCustomerId+'&opt=true&comp=&u=&a1='+Customer.Address+'&a2='+Customer."Address 2"+'&ste=&pmb=&city='+Customer.City+'&state='
    +Customer.County+'&zip='+Customer."Post Code"+'&p4=&ctry=&last=');

xmlnodelist := xml.SelectNodes('//*');
IF( xmlnodelist.ToString()<>'') THEN
BEGIN
j:=xmlnodelist.Count; 

FOR i := 0 TO xmlnodelist.Count - 1 DO
BEGIN
 
  xmlnode := xmlnodelist.Item(i);
  CASE xmlnode.Name OF
    'Urbanization': "Urbanization Code":= xmlnode.FirstChild.InnerText;
    'Address1': "Address 1":= xmlnode.InnerText;
    'Address2': "Address 2":= xmlnode.InnerText;
    'Suite': IF xmlnode.ParentNode.Name = 'Address' THEN "Suite Name":= xmlnode.InnerText;
    'PrivateMailBox': "PMB Name":= xmlnode.InnerText;
    'City': 
      BEGIN
        City:= xmlnode.FirstChild.InnerText;
      END;
    'State':
      BEGIN
        State:=xmlnode.LastChild.InnerText;
      END;
    'Zip':
      IF xmlnode.ParentNode.Name = 'Address' THEN
           Zip:=xmlnode.InnerText;
    'Plus4': "Plus 4":=  xmlnode.InnerText;
    'Country':
      BEGIN
        Country:= xmlnode.FirstChild.InnerText;
        //MESSAGE('Set country name to: ' + xmlnode.LastChild.InnerText);
      END;
    'CarrierRoute': "Carrier Route":= xmlnode.InnerText;
    'DeliveryPointCode': "Delivery Point Code":= xmlnode.InnerText;
    'DeliveryPointCheckDigit': "Delivery Point Code Digit":= xmlnode.InnerText;
    'CongressionalDistrict': "Congressional District":= xmlnode.InnerText;
    'AddressKey':"Address Key":= xmlnode.InnerText;
    'Results':
      BEGIN
        IF xmlnode.ParentNode.Name = 'Record' THEN
          BEGIN
            results := '';
            IF STRPOS(xmlnode.InnerText, 'AE01') > 0 THEN results := results + 'Zip Code Error; ';
            IF STRPOS(xmlnode.InnerText, 'AE02') > 0 THEN results := results + 'Unknown Street; ';
            IF STRPOS(xmlnode.InnerText, 'AE03') > 0 THEN results := results + 'Component Error; ';
            IF STRPOS(xmlnode.InnerText, 'AE04') > 0 THEN results := results + 'Non-Deliverable Address; ';
            IF STRPOS(xmlnode.InnerText, 'AE05') > 0 THEN results := results + 'Address Matched to Multiple Records; ';
            IF STRPOS(xmlnode.InnerText, 'AE06') > 0 THEN results := results + 'Address Matched to Early Warning System; ';
            IF STRPOS(xmlnode.InnerText, 'AE07') > 0 THEN results := results + 'Empty Address Input; ';
            IF STRPOS(xmlnode.InnerText, 'AE08') > 0 THEN results := results + 'Suite Range Error; ';
            IF STRPOS(xmlnode.InnerText, 'AE09') > 0 THEN results := results + 'Suite Range Missing; ';
            IF STRPOS(xmlnode.InnerText, 'AE10') > 0 THEN results := results + 'Primary Range Error; ';
            IF STRPOS(xmlnode.InnerText, 'AE11') > 0 THEN results := results + 'Primary Range Missing; ';
            IF STRPOS(xmlnode.InnerText, 'AE12') > 0 THEN results := results + 'Box Number Error from PO Box or RR; ';
            IF STRPOS(xmlnode.InnerText, 'AE13') > 0 THEN results := results + 'Box Number Missing from PO Box or RR; ';
            IF STRPOS(xmlnode.InnerText, 'AE14') > 0 THEN results := results + 'Input Address Matched to CMRA but secondary number not present; '; 

            IF STRPOS(xmlnode.InnerText, 'AS01') > 0 THEN results := results + 'Address matched USPS; ';
            IF STRPOS(xmlnode.InnerText, 'AS02') > 0 THEN results := results + 'Address matched to non-postal database; ';
            IF STRPOS(xmlnode.InnerText, 'AS09') > 0 THEN results := results + 'Foreign Postal Code Detected; ';
            IF STRPOS(xmlnode.InnerText, 'AS11') > 0 THEN results := results + 'Address matched to CMRA; ';
            IF STRPOS(xmlnode.InnerText, 'AS12') > 0 THEN results := results + 'Address deliverable by non-USPS; ';
            IF STRPOS(xmlnode.InnerText, 'AS13') > 0 THEN results := results + 'Address Updated By LACS; ';
            IF STRPOS(xmlnode.InnerText, 'AS14') > 0 THEN results := results + 'Suite Appended by Suite Link; ';
            IF STRPOS(xmlnode.InnerText, 'AS15') > 0 THEN results := results + 'Suite Appended by Suite Finder; '; 

            IF STRPOS(xmlnode.InnerText, 'SE01') > 0 THEN results := results + 'Web Service Internal Error; ';
            IF STRPOS(xmlnode.InnerText, 'GE01') > 0 THEN results := results + 'Empty XML Request Structure; ';
            IF STRPOS(xmlnode.InnerText, 'GE02') > 0 THEN results := results + 'Empty XML Request Record Structure; ';
            IF STRPOS(xmlnode.InnerText, 'GE03') > 0 THEN results := results + 'Counted records send more than number of records allowed per request; ';
            IF STRPOS(xmlnode.InnerText, 'GE04') > 0 THEN results := results + 'MelissaData Customer Number is Invalid; ';
            IF STRPOS(xmlnode.InnerText, 'GE05') > 0 THEN results := results + 'MelissaData Customer Number is Invalid; ';
            IF STRPOS(xmlnode.InnerText, 'GE06') > 0 THEN results := results + 'MelissaData Customer ID is Disabed; ';
            IF STRPOS(xmlnode.InnerText, 'GE07') > 0 THEN results := results + 'XML Request invalid; '; 

            IF STRPOS(xmlnode.InnerText, 'AC01') > 0 THEN results := results + 'Unknown (AC01); ';
            IF STRPOS(xmlnode.InnerText, 'AC02') > 0 THEN results := results + 'Unknown (AC02); ';
            IF STRPOS(xmlnode.InnerText, 'AC03') > 0 THEN results := results + 'Unknown (AC03); ';
            IF STRPOS(xmlnode.InnerText, 'AC04') > 0 THEN results := results + 'Unknown (AC04); ';
            IF STRPOS(xmlnode.InnerText, 'AC05') > 0 THEN results := results + 'Unknown (AC05); ';
            IF STRPOS(xmlnode.InnerText, 'AC06') > 0 THEN results := results + 'Unknown (AC06); ';
            IF STRPOS(xmlnode.InnerText, 'AC07') > 0 THEN results := results + 'Unknown (AC07); ';
            IF STRPOS(xmlnode.InnerText, 'AC08') > 0 THEN results := results + 'Unknown (AC08); ';
            IF STRPOS(xmlnode.InnerText, 'AC09') > 0 THEN results := results + 'Unknown (AC09); ';
            IF STRPOS(xmlnode.InnerText, 'AC10') > 0 THEN results := results + 'Unknown (AC10); ';
            IF STRPOS(xmlnode.InnerText, 'AC11') > 0 THEN results := results + 'Unknown (AC11); '; 

            IF xmlnode.InnerText = 'AS01,AS12' THEN results := 'Input Address Matched to DPV; '; 

             "Result Codes" :=  xmlnode.InnerText;
             "Result Text" := FORMAT( results,250);
          END
      END
  END;
END;

 

The MelisaDataCustomerId is just a key that Melisa data assigns to allow use of the service.  The code gets more complicated because we have to parse multiple results but that is not the point of this post and may come in a later post.

author: T | Posted On Sunday, September 22, 2013 11:12 PM | Comments (0)

Styling Dynamics NAV 2013 Page Values To Bring Attention To Them


 

When editing pages in NAV 2013, you can set styles to draw attention to values.  This is done by using the property value for style on a field and setting it to a pre-defined value.  Note:  The styling does not apply in the Web Client.

Style shown in the property list:

Style shown in the property list

 

Here is examples of how values will appear with the style applied on the page from NAV 2013 base installed on Windows 8.

Style Result Example
Standard no style image
StandardAccent Blue image
Strong Bold image
StrongAccent Bold Blue image
Attention Italic  Red image
AttentionAccent Italic Blue image
Favorable Green image
Unfavorable Bold Italic Red image
Ambiguous Yellow image
Subordinate Grey image
     

author: T | Posted On Sunday, September 22, 2013 8:49 PM | Comments (0)