I must admit, I didn’t know about Cassandra, other than perhaps a demo of Cassandra and/or MongoDB at a .NET user meeting.  So I decided it was time to give it a try.

  1. Download the tar http://cassandra.apache.org/download/.  This gave me a file called apache-cassandra-3.10-bin.tar.gz on my download folder.  I then created a c:\apache-cassandra-3.10 folder, and unpacked it using Total Commander (from Ghisler).  I knew it could hand tar files.  I’m not sure what other people use.
  2. I open the “Command Prompt”, and navigated to the above folder, then the bin subdirectory, and tried to run “Cassandra.bat”.  This lead to several issues and changes required:
  3. It runs a Powershell program, and if it fails for any reason, the logic falls through to an error about setting the “set-executionpolicy” to unrestricted.  I had done this along time ago on my machine, so this error was quite misleading.
  4. Had to set the environment variable JAVA_HOME to “c:\Program Files (x86)\Java\jre1.8.0_121”.   This might be slightly different on your machine.
  5. Then got  “the heap error”, and made change to configuration file, as shown in the “file compare” below (my change on left, the original on the right):
  6. Then I re-ran “Cassandra.bat” and everything seemed to start.  As a Windows user, you have to know it doesn’t run as a windows service, so you have to leave the command prompt window open the whole time you are using the database.
  7. Being a .NET developer, at first I tried to jump into C#.  From Visual Studio 2013 I ran the NUGET command:
    Install-Package CassandraCSharpDriverThis lead to the error:Install failed. Rolling back…
    Install-Package : Could not install package ‘Microsoft.Extensions.Logging 1.0.2’. You are trying to install this package into a project that targets ‘.NETFramework,Version=v4.5’, but the package does
    not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author.
    At line:1 char:1After some googling and guessing, I tried an older version and it worked:Install-Package CassandraCSharpDriver -Version 3.1.0Mind you, at this point, I really had no idea what I was doing it.
  8. I copied some code from the C# tutorial on this site:  https://academy.datastax.com/resources/getting-started-apache-cassandra-and-c-net
    // Connect to the demo keyspace on our cluster running at 127.0.0.1
    Cluster cluster = Cluster.Builder().AddContactPoint("127.0.0.1").Build();
    ISession session = cluster.Connect("demo");

    It failed on the Connect command, with the following .NET error:

    An unhandled exception of type ‘Cassandra.InvalidQueryException’ occurred in Cassandra.dll

    Additional information: Keyspace ‘demo’ does not exist

  9. So, now I realized I needed a demo database, or a tool to see what database are installed.
  10. I like GUI’s (Graphical User Interfaces) so I googled and found reference to DevCenter, downloaded it.  Got a file called DevCenter-1.6.0-win-x86.zip, so I created a folder C:\DataStax\DevCenter and unzipped it.  No MSI install needed.   Just run DevCenter.exe and the nice GUI opens up.
  11. Recall that I’m winging this whole experiment, trying to use past SQL Server Knowledge and tidbits picked up from the .NET meetup.  I ran the commands below, but one at a time. I’ll explain them after the picture.
  12. To see if the demo database existed, I ran:SELECT * FROM system_schema.keyspaces;The command and results are shown below:“demo” didn’t exist ,and neither did “nealdemo” the first time I ran this.
  13. So I preceded to create the keyspace called “nealdemo”.CREATE KEYSPACE NealDemo
    WITH replication = {‘class’: ‘SimpleStrategy’, ‘replication_factor’ : 3};
    SELECT * FROM system_schema.keyspaces;And it actually worked fine the first time!
  14. Then I needed a table, so I ran this:use nealdemo;
    CREATE TABLE archive (
    filename text PRIMARY KEY,
    fileext text,
    folder text,
    filedate date,
    dateinserted date,
    filecontents blob
    ) WITH comment=’archive of files’
    AND read_repair_chance = 1.0;My experiment is to archive some files on disk into a database instead, including the entire contents of the file (and to play with some very big files that contains XML and EDI related to BizTalk B2B data integration).If you don’t include the “use nealdemo” it fails.
  15. I was then ready to insert a couple of rows:use nealdemo;
    INSERT INTO archive (filename, fileext, folder, filedate, dateinserted, filecontents)
    VALUES (‘test1.csv’, ‘csv’, ‘C:\Archive\EDI’, ‘2017-04-07’, ‘2017-04-07’, textAsBlob(‘file contents’));use nealdemo;
    INSERT INTO archive (filename, fileext, folder, filedate, dateinserted, filecontents)
    VALUES (‘test2.csv’, ‘csv’, ‘C:\Archive\EDI’, ‘2017-04-04’, ‘2017-04-07’, textAsBlob(‘innards of the file’));The first problem I had was trying to specify the blob as just a text string.  Then I google and found that I need to wrap it with the function “textAsBlob”.
  16. Then I was ready to query my data:use nealdemo;
    select * from archive;And that worked!   So once I got into DevCenter and ran a few commands, things were looking good.
  17. Now the C# above also runs (by substituting “nealdemo” for “demo”) and it has to be lower case, even though I typed “NealDemo” when I created the keyspace. I.e. it connects and establishes the connection
  18. So I took it one step further, and added some code to retrieve data and display it – similar to the sample code I found on the site above:static void test1()
    {
    // Connect to the demo keyspace on our cluster running at 127.0.0.1
    Cluster cluster = Cluster.Builder().AddContactPoint(“127.0.0.1”).Build();
    // looks like keyspacename (parm below) has to be all lower case
    ISession session = cluster.Connect(“nealdemo”);

    // Try data retrieval
    RowSet rows = session.Execute(“select * from archive”);
    foreach (Row row in rows)
    Console.WriteLine(“{0} {1}”, row[“filename”], row[“fileext”]);

    }

    It’s not fancy or anything, but I’m impressed – I got the results back:

Summary: Not too bad for a 3-4 hour experiment. A few frustrations were encountered. I will move forward now and try to do something a little more useful and exciting with it, and learn more about the architecture of Cassandra and it’s CQL commands (note it’s CQL, not SQL!).

I’m still thinking about whether I want to get AWS (Amazon”s cloud platform) certified.  But one question I had was about where I would have to go to take the exams.
In the past I’ve taken exams, and familiar with testing centers like Sylvan (Prometric), Vue, and 2Test and others.

Question: Are AWS exams online or at a testing center?
Answer: You go to a testing center to take the exam.

Question: How do you find the testing centers for AWS exams in your city?
Answer: Start the scshedule an exam process, identify the exam centers, then close the process if you just wanted to check the locations.

From this page: https://aws.amazon.com/certification/our-certifications/  click “Schedule an exam”.
You have to sign up with https://webassessor.com/wa.do?page=createAccount&branding=AMAZON and pretend you want to take an exam, just to see the exam locations and addresses.  You can then back out.

An example of Texas exam centers, such as Dallas And Austin can be seen in the image below (Dallas is highlighted). One of them is Sylvan, the other is “Business Communication Solutions”.  Those seem to be popular in major cities, along with many college campuses.

 

 

 

Do you need some part time help with your BizTalk system?

Hi, I’m Neal Walters from Irving Texas, a suburb of Dallas. I made this live stream video to introduce myself:

I was a Microsoft Certified Trainer, and taught BizTalk over 15 times.
Then I went into consulting, and I’ve been doing nothing but BizTalk since 2004.

So that’s over 13 years of BizTalk.

I can also help or debug C#, WCF web service, or SQL issues, MSMQ.
and I also have experience with MQ-Series, AS2 and EDI, and over 20 years of mainframe.
These days, it’s usually no big deal to VPN into your system to do the work.

I can work with you on a GoToMeeting to troubleshoot issues, or I can help you architect and/or program your new solution.
You can do the work while I “look over your shoulder”, or I can do the work, and let you “look over my shoulder” if you want to learn, rather than just “get-er-done”.  Sometimes, you just need someone to show you how to do something.

I can also do Admin work, or give you an analysis of your current system, and tell you what you need.

So, instead of going to a recruiter or a middle man, I invite you to work directly with me.

On this BizTalk YouTube Channel, you can see several hundred training videos that I did for BizTalk 2006 “back in the day”.  I used to sell them, but now I decided to donate them to the public.

I’d love to chat with you and see your needs can be met. 214-455-8060.

I’m creating my own checklist of things to watch out for on a BizTalk install, beyond the basic BizTalk hardware/software prerequisites.

Sites below are for BizTalk 2010 – but same applies for most any other release:

https://msdn.microsoft.com/en-us/library/aa577661.aspx – List of Active Domain (AD) groups and service accounts.
I took this, put it in MS/Word and added a column to the left with a suggested name for the client.  Then I asked the client to verify my suggest name to fit their existing AD group/account naming conventions.  I included an “X” for each environment, e.g. (D=DEV, T=Test, Q=QA, P=Prod), or a 3-character (DEV, TST, QUA, PRD).   Example, BTSPRDADMINS (or if you like mixed case, BtsPrdAdmins).


https://msdn.microsoft.com/en-us/library/gg634639(v=bts.10).aspx  Windows Configuration Checklist –
– turn off hyperthreading,
– Ensure Windows Server processor scheduling is set to “Background services”
– Place the Windows paging file on a separate local physical drive.
– Stop real-time virus scanning of database files and .xml, .csv, etc…


https://msdn.microsoft.com/en-us/library/gg634450(v=bts.10).aspx – IIS Configuration Checklist –


https://msdn.microsoft.com/en-us/library/gg634642(v=bts.10).aspx – SQL Configuration Checklist
  – enable Trace Flag 1118 (TF1118) – to reduce contention
  – sp_configure ‘Max Server memory (MB)’,(max size in MB)sp_configure ‘Min Server memory (MB)’,(min size in MB)
 – Autogrow to fixed MB not % for BizTalk DBs


https://msdn.microsoft.com/en-us/library/gg634496(v=bts.10).aspx  – SQL Server Settings that Should Not Be Changd


1) Max Degree of Parallelism (MDOP) is set to “1” during the configuration of BizTalk Server for the SQL Server instance(s) that host the BizTalk Server MessageBox database(s). This is a SQL Server instance-level setting. This setting should not be changed from the value of “1”. Changing this to anything other than “1” can have a significant negative impact on the BizTalk Server stored procedures and performance. If changing the parallelism setting for an instance of SQL Server will have an adverse effect on other database applications that are being executed on the SQL Server instance, you should create a separate instance of SQL Server dedicated to hosting the BizTalk Server databases.

2) Auto create statistics and auto update statistics are turned off for the BizTalk MessageBox DB. 
zTalk Server stored procedures have exact joins and lock hints specified on the queries. This is done to ensure that the optimal query plan is used by the BizTalk Server queries in SQL Server. The distributions and expected results for the queries are known; the approximate number of rows returned is known. Statistics are generally not needed.

3)  BizTalk Server does not support defragmenting indexes. “DBCC INDEXDEFRAG” and “ALTER INDEX … REORGANIZE …” are not supported since they use page locking, which can cause blocking and deadlocks with BizTalk Server. BizTalk Server does support database index rebuilds (“DBCC DBREINDEX” and “ALTER INDEX … REBUILD …”), but they should only be done during maintenance windows when BizTalk Server is not processing data. Index rebuilds while BizTalk Server is processing data are not supported.

Index fragmentation is not as much of a performance issue for BizTalk Server as it would be for a DSS system or an OLTP system that performs index scans. BizTalk Server does very selective queries and updates and BizTalk Server stored procedures should not cause table or index scans.

https://blogs.msdn.microsoft.com/biztalk_core_engine/2007/01/04/what-you-can-and-cant-do-with-the-messagebox-database-server/  – What you can and cannot do with the MessageBox Database

The next very, very important thing to understand is that while the database is installed on your server, it is not “your” database. It is our (or if you catch me on the wrong day, not thinking, “my”) database

A quick list of things which can effect the query plans:

– Statistics (don’t enable these)

– Parallelism (don’t turn this on )

– Table structure (don’t add indexes, columns, triggers, … If you do you will hear silence when you call for help)

– Stored procedures (don’t change them. You can look all you want, but no touching)

I was setting up the Windows Service Bus on a Windows 10 laptop, on which I logon with my hotmail email as my Microsoft userid.
I creating my first C# program, and following the instructions here: MSDN Developing an Application/Service Namespaces.

This post entitled “How to setup Service Bus PermissioN?“, gave me the idea to run the Get-SBNamespace.  Let’s suppose my hotmail was NealSomething@hotmail.com.  Then I see that my username listed is just “Neal”.  This name matches the disk structure for “My Documents”, for example: C:\Users\Neal\Documents.

The results of the Get-SBNamespace and the successful New-SBNamespace can be seen below.  I see that “neal” (lower case for some reason) is listed under ManageUsers, so I specified that user on the New-SBNamespace command and it worked.

 

 

 

I had the following chat via a Microsoft Chat/Sales guy today.

Microsoft Answer: In order to have access to BizTalk Server 2016 you’d need VS 2017 Enterprise with MSDN or the MSDN Platforms subscription. I can help you get in contact with a Microsoft Reseller to provide you or your client a quote to purchase this product, would this work?

Neal Question: And can you confirm this… If admin installs BizTalk, but then two developers use the system on a regular basis, would we need just 2 MSDN licenses? or does the Admin need one for a total of 3?

Microsoft Answer: You would need a total of 3. Visual Studio and MSDN are licensed in a Per User basis, so each user would need his/her own license/subscription.

Neal Question: Ok, so by just have the developer install it instead of the Admin, we save a whole license? That doesn’t make a lot of sense.

Microsoft Answer: Each user that needs access to Visual Studio, MSDN or any component like software downloaded, would need his/her own license/subscription. Does this make sense?

Visual Studio Subscription (formerly MSDN) Prices as of March 2017

Professional
(Standard)
Enterprise
Buy   $1199   $5999
Renew    $799   $2569

The Professional “Standard” includes one CAL (Client Access License) to TFS (Team Foundation Server).

It looks like Microsoft has decided to phase out the term MSDN in favor of “Visual Studio Subscription”, but then, you still see (MSDN) in parentheses after some of the product.  They really like to muddle it up to be very confusing.  I think bottom line, they want you to talk to a sales rep.

Source: https://www.visualstudio.com/vs/pricing/

For Visual Studio Pricing, they have a similar doc called: “Visual-Studio-2017-Licensing-Whitepaper-March-2017.pdf“.

Per Core Server Pricing for Production Environment

Branch Standard Enterprise
License   $620 per core   $2485 per core   $10835 per core

Everywhere that I’ve worked and consulted, the Enterprise edition is used.  The “branch” edition is a concept that you buy a cheap BizTalk server for customers or remote offices, and each one would have very limited processing, usually sending the data on to the main BizTalk server which would be the Enterprise edition. I’ve yet to actually work with anyone that uses this.

Source for pricing: https://www.microsoft.com/en-us/cloud-platform/biztalk-pricing

See also this article: https://blogs.biztalk360.com/understand-biztalk-server-2013-licensing/

We all know that Microsoft is infamous for moving their links around, but as of today, you can download the “BizTalk Server 2013 R2 Licensing Datasheet and FAQ” from the linked title.  They don’t seem to have a similar document for BizTalk 2016 yet.

You have to have that document to see the side by side comparison grid of the different versions of BizTalk (Branch, Standard, Enterprise, and Developer).

The main difference between Standard and Enterprise, as it has been or many years, is that the Standard edition is limited to 8 cores, and it only allows 5 applications.  What is an application?  That’s a bigger question. Usually, it’s rather clear and ties to your development project.  Management wants to accomplish a project, they fund it, and you create an application to solve the issue.  But, who is to say you couldn’t put two “systems” in one “application”?
The other thing I’ve never found out for sure, if having a sixth application won’t work in the standard edition, or whether it is just a violation of your license. As I mentioned above, everywhere I’ve been, we have always used the Enterprise Edition.

The second difference is that Enterprise has more features for scale out, failover, and high availability (i.e. clustering). It allows you to have multiple message box databases, typically spread across different SQL servers, in order to spread the I/O load for heavy volume systems.  While I’ve used clustering in many sites, maybe only one site of the dozen I’ve worked, has split out a second message box database.

The developer license actually does everything that the Enterprise can do, and thus can be used in your dev and maybe QA environments.

The above PDF document also explains the “Per Core” license model, which is also explained in the article on the BizTalk 360 site above.

 

Follow-Up about the Admin License and “MSDN Platforms”

A few days later I learned about the MSDN Platforms subscription, so I returned to ask some more questions:

Neal Question: Hi, I was here the other day, and needed clarification on something. If we are installing BizTalk 2016, and let’s suppose an Admin installs it on a server, and the developer uses it regularly after that., he said we needed two licenses. But my question today is, could the admin use the MSDN Platform license?

Microsoft Answer: Hi, Neal, I’ll be glad to help you with your questions about MSDN licensing. Well, 2 people will need to use any software from the MSDN subscription, then, both would need to be licensed for it, unless the admin already has a license for BizTalk 2016, then, no additional licenses are required.

Neal Question: If we have BizTalk licensed for Prod, then does that qualify the admin to install it on Test servers? Or is MSDN needed for that?

Microsoft Answer: Well, if you have the license, you can use it for testing. But, your production license is only for one server, with MSDN you are able to install it as many times as needed, but, only the MSDN licensed users are allowed to use it.

Neal Question: Ok, so back to my original question – does the MSDN Platforms include BizTalk 2016?

Microsoft Answer: Let me look it up real quick for you. Eventually he came back and said it was included.

But bottom line, it’s hard to get a clear answer from even these licensing support guys.  They almost always ask you questions like “Have you talked to a sales rep”, or similar.

See also this good post on “MSDN Platforms (announced)“.  Link to Microsoft MSDN Platforms.

 

In Microsoft SQL, how can we group by a date, when the column we want to group by is a date time?
For example, you want the number of rows created for each date, and you have a column in the database called Date_Added (or in my example below, TrcDateTime).

Code Sample 1:

select DATEADD(dd, 0, DATEDIFF(dd, 0, trcDateTime)) as Date, 
       count(*) as count 
from trace 
GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, trcDateTime))

Output 1:

The above gives the correct counts, but gives a rather  ugly Date, because it shows the time as 00:00:00.00.0000. To remove that, we can convert the date to a string.

Code Sample 1:

select LEFT(CONVERT(VARCHAR, DATEADD(dd, 0, DATEDIFF(dd, 0, trcDateTime)), 120), 10)  as Date, 
       count(*) as count
from trace
GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, trcDateTime))

Output 2:

This is how you can convert a DateTime to a String:

LEFT(CONVERT(VARCHAR, trcDateTime, 120), 10)

I took the entire expression from the first query: DATEADD(dd, 0, DATEDIFF(dd, 0, trcDateTime))
and substituted it where the italic trcDateTime was in the expression above.

 

 

 

It’s long been said that a picture is worth a thousand words.  I think it’s necessary to have a few diagrams to show the BizTalk flow of any application. I’m not happy with UML, because they don’t show the many aspects of BizTalk.  I’ve walked into companies before that had no diagram, and the first thing I did was to create one.  In the process, I learned the flow of the system, and I document it for myself and others.  I often pin such diagrams to my cubicle or tape them to my office wall, and refer to them frequently.  They are constantly used in meetings to explain steps and processes to managers, users/customers, and/or other developers.

Ideally, the diagram should include:
1) Some key filenames (or at least partial filenames, as the paths are going to be different from development to QA to Production) 2) Key programs (orchestrations and any C# programs)
3) BizTalk Send/Receives
4) Any touchpoints with existing in-house systems or external trading partners (vendors, customers, etc…)

Here are some of the shapes and colors I’ve been using as part of standard Visio:
1) Light Yellow Parallelogram – Receive or Send Port – If relevant, I often include a map name or pipeline on the shape.
2) Blue Rectangle – Orchestration
3) Disk – Disk
4) Database – Database or Tables in Database
5) Cloud – Internet (FTP or HTTP access to outside company)
6) Red Rectangle – Pollers (C# programs that read database and create XML files)

NOTE: There is a package of Visio 2013 Stencils for BizTalk (by Sandro Pereira).  I have not yet used them, but they relate to representing Biztalk Server physical architectures, integration architectures and solution diagrams.

I’ve also used http://Draw.IO, as sometimes, not everyone has access to a license of Visio.

The following is an example from a larger project where we were processing a variety of Rosetta Net documents. The diagram also includes the project management number for each task (this company was using a system called “Redmine“).  In the example below, I wanted to emphasize some of the logic of the orchestration, and I had room, since I had was putting only one or two Rosetta documents per page. I also included the name of the developer working on in the header (removed from diagram below), as each developer was working on maybe 2-3 Rosetta documents.

Here are some of the shapes and colors I’ve been using as part of standard Visio:
1) Light Yellow Parallelogram – Receive or Send Port – If relevant, I often include a map name or pipeline on the shape.
2) Large Green Portrait Rectangle – New Development Orchestration for this application [all it’s main logic is to the right]
3) Green Landscape Rectangle, Diamonds, etc… – Steps in the orchestration
3) Cylinder – Disk and DB
4) Blue Rectangle – This was an existing orchestration that we share across applications
5) Purplse Hexagram – Pollers (C# programs that read database and create XML files)

 

There is also a free tool called Biztalk Documenter. It’s project description says:

This tool creates documentation for a given  BizTalk server 2006, 2006R2 2009, 2010, 2013, 2013R2 or 2016 TAP installation. This project has used the source code of the original BizTalk 2006 Documenter , updated and improved it. We have also added the SSO documentation by the Red Eyed Monster from the BizTalk 2010 documenter

The related bog is “Documenting Your BizTalk Solutions“.  That blog has a full set of screen shots to show you what comes out of this tool.

When I’ve had one or more long complicated orchestrations, that need extra documentation, I have used TechSmith’s SnagIt to take screen shots, and paste into a Word document.  Then I write paragraphs of text in the document describing what needs further clarification.  Unfortunately, BizTalk Orchestrations don’t have a “text” or “doc” shape.  I often use “Group” shapes in BizTalk Orchestrations to provide additional documentation “inline”, and I even nest them if I need more text than will fit.  I also put long text on the Decide shapes if that is helpful.  Here’s an example:

 

There are advantages and disadvantages to both manual and automated documentation.  Obviously, the automated documentation can be updated any time by just re-running it. But it is usually bulky and sometimes too detailed, and much too large to print.  I’ve always preferred or one or twp page diagram that summarizes the whole system with “the big picture”.  As of yet, I think only a human can do this.  Part of the art is when to abstract – i.e. what to include in the diagram, and what to leave out.  If you try to include too much, you will end up with 3 to 5 pages of diagrams and then you can get lost in the detail.  If you omit too much, then the diagram may be of little value.   It’s even possible that you might want both, a very high level diagram for management, and then a more detailed diagram for architects and developers.

 

Neal Walters has been work exclusively with BizTalk since the 2002 release, and has both been a Microsoft Trainer of BizTalk and a consultant since 2004.  He is now developing a Dallas SEO agency (Search Engine Marketing).

 

One way to check for missing data is to do an xpath count.

The two-step approach (put the xpath in a variable first). Some might find this code cleaner, but you use a variable. Note that you have to use the conversion statement to convert the string result of the xpath to a number, if you need to test that number as I do in the following “if” statement.

 

strCountMessageKeysXPath = "count(//*[local-name()='MessageKey']";

intCountMessageKeys =
System.Convert.ToInt32(
xpath(msgCreateSPServiceOrderAckResp.parameters,strCountMessageKeysXPath)
);

// Yes you can put if statement in expression shapes (but not message assignment shapes) 
if (intCountMessageKeys >= 2) 
{
   strXPath = "//*[local-name()='MessageKey'][2]"; 
   strWebRespMessage2Key = xpath(msgCreateSPServiceOrderAckResp.parameters,"string(" + strXPath + ")"); 
}

 

The one-step approach:

 

strCountMessageKeysXPath = ;

intCountMessageKeys =
System.Convert.ToInt32(
xpath(msgCreateSPServiceOrderAckResp.parameters,"count(//*[local-name()='MessageKey']")
);
// Yes you can put if statement in expression shapes (but not message assignment shapes) 
if (intCountMessageKeys >= 2) 
{
   strXPath = "//*[local-name()='MessageKey'][2]"; 
   strWebRespMessage2Key = xpath(msgCreateSPServiceOrderAckResp.parameters,"string(" + strXPath + ")"); 
}

 

 

NOTE: The reason I have .parameters after the message is that it is a multi-part message.
If you don’t get that correct, you may get the error “The expression you have entered is not valid”, or “An xpath expression must be of the form” if you hover over the error.

 

If you get the error “An xpath expression must be of the form …” (in an expression shape of a BizTalk orchestration), here’s one possible solution.

I was using a multi-part message, so instead of msgCreateSPServiceOrderAckResp, I had had to specify msgCreateSPServiceOrderAckResp.parameters.

The compiler just shows the error “The expression that you have entered is not valid”. But when you find the small red mark, and mouse over it, you see the following:

Here is the corrected version: