Answering Prompts via URL API

MicroStrategy offers a lot of built in manipulations that can be performed directly within the URL.  This can provide a lot of benefits for seamlessly linking to MicroStrategy reports from either within MicroStrategy itself or from an external system.  Today I’ll highlight the most common and useful thing you can do in the URL: answering prompts using several different methods.


The URL API may sound complicated, but its actually really simple and doesn’t require any actual programming or extra licenses.  This makes it the ideal tool to perform some neat tricks and even some basic “free” customizations.

Obtaining the Base URL
Before you can start modifying the URL for a report or document, you must first obtain it.  The easiest way to do this is to right click on the report or document in Web before you run it and choose Properties.  At the bottom of the screen is a link to the report.  Right click that and choose Copy Link.  In 9.2.1, there’s now the option to choose Show Link from the right click menu which saves you a step.

DO NOT ever take the URL out of your address bar.  This usually contains extra information that’s specific to your current session, or it’s missing crucial information that is already stored in your session.  These links will almost never work after your session has timed out, even for you.  When building static links, always be sure to get a “clean” URL using the method described above.

Answering Prompts
Once you’ve got the base URL, you can start adding/modifying it.  The most common task to perform is to automatically answer Prompts.  This is useful when linking to reports or documents from an existing report or document and you want to automatically answer some or all of the prompts based on previous knowledge, either because you know what the user clicked on or you know what the user previously answered.

There are 5 built in methods for answering prompts:

  • valuePromptAnswers
  • objectsPromptAnswers
  • elementsPromptAnswers
  • originMessageID
  • promptsAnswerXML

The ones you’ll most commonly use will be elementsPromptAnswers and valuePromptAnswers.  The other’s have their use too, and while they’ll all arrive at the same end result, there are situations where only one or some will work.

To apply a prompt answer, simply attach the following to the end of the URL:

Value Prompts
These are prompts where the user just types in a value in a text box, or chooses a Date from the date picker.  The syntax is:

&valuePromptAnswers=VALUE

The value is just the direct value that will be stored in the prompt, so if you were answering “South”:

&valuePromptAnswers=South

If you want to answer multiple prompts, such as “South” and “42”, then you just separate them with a ^.  The value prompts are answered in order based on the order the Prompts are presented, so be sure that they match up correctly:

&valuePromptAnswers=South^7

And if you’re answering a date or anything else that has special characters in it, you’ll need to encode the URL (I use this handy tool).  So to answer 8/11/2011:

&valuePromptAnswers=8%2F11%2F2011

The valuePromptAnswers macro doesn’t support the ability to pass an empty answer, so if you want to pass one you have to manually send the promptXML.  An empty value prompt works like an empty elementPrompt where you simply pass the prompt ID with no value.  You can do this with the following XML string:

<rsl><pa pt="3" pin="0" did="340788BD41D30090F7168AAC5ABFCB35" tp="10"/></rsl>

The did is the GUID of the value prompt.  Take this string over to the URL Encoder page, plug it in, and pass the result in the URL like this:

&promptsAnswerXML=%3Crsl%3E%3Cpa%20pt%3D%223%22%20pin%3D%220%22%20did%3D%22340788BD41D30090F7168AAC5ABFCB35%22%20tp%3D%2210%22%2F%3E%3C%2Frsl%3E

Element Prompts
Element Prompts are the most common prompt type.  These are the prompts that give you the list of elements from an attribute, commonly in a shopping cart style, and let you choose as many answers as you want for your filter.

To answer an Element Prompt, you need to pass the Attribute GUID.  The order doesn’t matter in that the Attributes being passed in will be matched up to the prompts looking for that Attribute as an answer.

&elementsPromptAnswers=AttributeGUID;AttributeGUID:Value

Notice that we have to pass the Attribute GUID twice, and that the first separater is a semicolon, and the second is a colon.  The first Attribute GUID
tells the prompt which attribute is being passed, and therefore which prompt to answer.  The second one is part of the definition of an Attribute Element, which is made up of the pair AttributeGUID:Value.  It does look a little strange to have to pass the GUID twice, but there it is.

Update: Easy method for doing this dynamically.

To send multiple answers, just keep adding AttributeGUID:Value pairs separated by a semicolon.  For example, if you wanted to pass the values North and South:

&elementsPromptAnswers=AttributeGUID;AttributeGUID:North;AttributeGUID:South

Notice that we only have to give the initial AttributeGUID once, and then each Element answer we want to pass is the AttributeGUID:Value pair separated by a semicolon.

To answer multiple prompts:

&elementsPromptAnswers=AttributeGUIDFirst;AttributeGUIDFirst:Value,AttributeGUIDSecond;AttributeGUIDSecond:Value

For multiple answers, you just separate them with a comma.  The rules still apply that before each answer, you have to preface it with the Attribute GUID that you’ll be answering, and then the AttributeGUID:Value pairs of each element to answer after that.

Origin Message ID
As you can imagine with the above syntax, the URL can get quite long and complicated.  But if you just want to simply retain the Prompts that the user already answered and persist them for the next report, you can actually directly reference the values in the user’s session with the following:

&originMessageID={&DocumentMessageID}

As the name implies, this only works when linking from documents, but that {&DocumentMessageID} macro will resolve to a short alpha numeric string that represents the user’s session.  That information can then be pulled automatically by the next report to answer all of the prompts.  Any prompts that are not included in the previous report will be prompted on their own.  This saves a lot of trouble of juggling multiple answers or AttributeGUIDs and just handles everything for you.

It’s important to note that the this Message ID is user specific and session specific, which means it will only work in “real time” linking.  You can’t use this method to copy/paste a link to another user or use it in a subscription, whereas the links generated using valuePromptAnswers and elementsPromptAnswers could be shared.

Object Prompts
Objects Prompts are more complex by nature, and so is their URL API equivalent.  An Object Prompt allows you to choose which objects are displayed on the report, and it’s syntax looks like this:

&objectsPromptAnswers=ObjectGUID~ObjectTypeID~ObjectName

Yes those are tildas ­čÖé

The Object GUID is the GUID of the object you’re selecting, not the Object Prompt itself.  It could be an Attribute, Metric, Filter, or whatever object you’re prompting on.

The Object Type ID is the MicroStrategy internal value for the kind of Object we’re passing.  Attribute = 12 and Metric = 4, which are the most common, but for a complete list you can check out this TechNote.

Finally, the Object Name is whatever the name of the Object is.  Don’t forget to URL Encode it.  (This is actually optional, and omitting it looks like it doesn’t affect anything.  So if it’s giving you trouble, just drop it).

To pass multiple selections, simply separate them with a comma, just like last time.

Prompts Answer XML
This one is the least used but can really save you in a pinch.  It’s the same thing as the Document Message ID, except it stores the information directly in the URL in full XML glory (encoded of course). This makes the URL portable (share with others or use in a subscription), but it can get very, very long.  IE has a URL length limit of ~2,000 characters, you can easily hit it with just a few prompts using this method.  Firefox and Chrome don’t have that limit, but who can really tell with the speed at which browsers are releasing these days.

I’ve used this in the past a few times when needing to do some custom stuff, but it’s pretty rare.  Just know that it exists, it can be dynamically built at run time, and it can answer -ANY- prompt.  So if you can’t find satisfaction in one of the easy pre-built macros, research this one some more and you can definitely do it using this.

You may also like...

86 Responses

  1. tootscamus says:

    Bryan,

    Sorry if this ends up being a duplicate submission, my original comment appears to have gone to some netherworld. This is indeed a nifty little trick for calling a MSTR report from within MSTR. But how about the external case. How could one perform this same action action and ensure that the external system can log into MSTR securely (password sent as text)?

    Thanks,
    Andy

  2. Bryan says:

    I’d recommend using TaskProc for external calls.

  3. Vish says:

    Hi Bryan,

    thanks for the wonderful article.. I had one small doubt as i am complete newbie to this … I have a prompt for say time there are no fixed amount of elements in the prompt … how do i dynamically add AttributeGUID:Value to my URL

    thanks again

    • Bryan says:

      It depends where you’re building the URL. If it’s inside a document to link to another one, then this is the easiest method. If you’re doing it externally, then build a Document with the prompt and a text box containing {&PROMPTXML}. Run it and you’ll see what the element ID looks like (Depending on the data type of your Time). Then, you can pass that ID in your URL. (Don’t forget to Encode it).

    • cutie says:

      hai can you please clear me why cannot we add an object prompt containing different types of objects to a report

  4. Hi Bryan
    We have the same report saved with different prompt answers in a number of folders. This make maintenance a pain as each copy has to updated. Can this solution be used to overcome this problem by just saving the URL in the folder. If not can you suggest another solution please?
    Thanx
    Hong Kong Fuey

    • Bryan says:

      You could make a Document that acted as a “folder”, and put links to a single report with the various defaults in their links. That would simulate the same behavior without all of the maintenance.

  5. Bruce says:

    Im trying to incorporate the &objectsPromptAnswers= method to answer a prompt. to test this, I have setup a grid, with one object prompt, capable of two answers both are filters, named week four and week3. Here is what I put in:
    &objectsPromptAnswers=5DB6529847FD74854F6BFBABC71326D7~1~week3 but then i get an 2147212797 error code, looks like it refers to schema loading error. Ive updated the schema in desktop however. At first I thought the 1 for the filter type was wrong so i tried 12 for attribute to add an attribute to the grid, and same thing, error. Any ideas? all help is appreciated.

    • Bryan says:

      I just tested this and it worked fine for me (9.2.1). One observation I made is that the last piece of the string with the name is optional. I got the same results with or without it. Also, make sure the GUID you’re passing is of the target Filter you’re picking, not the Object Prompt.

    • Bruce says:

      Ah ok, my mistake. So the ObjectGUID in &objectsPromptAnswers=ObjectGUID~ObjectTypeID~ObjectName is actually the GUID of the object in the prompt im wanting to select. So that would mean with object prompts, it is forced to answer them in order, and prolly have to answer optional ones at that, since you are never passing the object prompt guid.

    • Bryan says:

      Yeah, which is probably why the syntax follows that of a Value Prompt (which has the same order requirements). I’ll update the post to be more clear about that.

  6. Hi Bryan,

    I’m having a doubt regarding the Event driven Scheduling, I need to get the users prompt answers of the subscribed reports to Event driven ie) User 1 ->RPT01(With Company Prompt answers as A,B) Similarly User 1 -> RPT02 (With Company Prompt Answers as C,D) Similarly USers 1 -> RPT03 (With Company Prompt Answers as A) So here the user 1 is subscribing the reports to OnDBLoad Event. Is there any way by which we can trigger the reports to user 1 as and when each company load over and on the basis of prompt answers selection by user. ie) For Eg as per above scenario user needs to get RPT03 after dataload completion of A company ..etc the case for other reports for User1

    Any solution could be provided from MSTR side ??

    Regards,
    Rajavel S

  7. rajesh b says:

    Hi Bryan,
    How many Prompts can use in Nested Prompts. Is there any restrictions to use Nested Prompts pls give me reply

    • Bryan says:

      I’m sure there’s a practical limit, but I’ve never hit it. Just do what you need to until you hit an error ­čÖé

  8. cutie says:

    can we add an object prompt that contains differnt object types to a report.

  9. Hello Bryan,
    How can we auto submit the form or page so user don’t have to click on “Run Report” or “Run Document” or “Export” on bottom of the prompt page. I am passing a value prompt in the url.

    • Bryan says:

      You’ll only see a prompt page if there’s an unresolved prompt. If you’ve only got a Value prompt, then passing a valuePromptAnswers should answer it and bypass that screen. Do you have additional prompts?

    • Thanks Bryan, There is only one prompt, but I found out that I need to add this (executionMode=3) to the link to bypass “Run Document” page.
      Now only problem that I am having is that our company uses LDAP and standard authentication. So, the login page has radio button to choose which authentication user wants to use. If it is LDAP then it easy, just pass in uid and pwd tags, but how can I tell the engine in the URL link to pick the standard authentication not the LDAP?

  10. Kris says:

    Hi Bryan,

    very useful information.
    How about passing values from selectors on dashboard to a hierarchy prompt of target report.

    • Bryan says:

      These functions are actually shortcuts to answering prompts, and there isn’t one for a hierarchy prompt. Answering that might be too complex, but here’s how you would do it. Create a document with a report having that prompt as the dataset, and add a big text box with the code {&PROMPTXML} in it. Run the document, answer the prompt, and a big XML string will be shown. Take that string over to http://meyerweb.com/eric/tools/dencoder/ and paste it in and hit Encode. It’ll give you a long spaghetti string of text. Then with your Base URL mentioned above, add &promptAnswersXML=your_spaghetti_text_string. That will answer the prompt. You can look at the string and find where the option you chose is, and replace it with {[Region]@ID} or whatever it is you’re pasting (make sure to do this after the encode step so you don’t encode the braces and brackets). Then, MicroStrategy will dynamically answer it.

      In order for a selector to pass that value, just put the link as a text box inside a panel stack and target the panel stack with the selector. I’ve never tried answering a hierarchy prompt this way, so it may be that the XML string is more dynamic than a simple value, but give it a try and it may work for you.

    • Kris says:

      Hi Bryan,

      I appreciate your immediate reply.
      In my case I have 4 prompts on my target report, out of which 3 of them are same as source.So, I used Origin MessegeID which is working fine. Then I got the soaghetti_text_string also for the hierarchy prompt.

      joining both of these on the url API still giving me the hierarchy prompt. :(..

      And also I didn’t get your point “Replace it with {[Region]@ID}”..

      The final URL:
      It looks like..
      http://——-reportID=–&originMessageID={[DocumentMessageID}&promptAnswersXML=The_Spaghetti_text_string&reportViewMode=1;

    • Bryan says:

      Try removing the OriginMessageID and see if the hierarchy prompt gets answered (and only the other 3 prompts are answered). There was a bug ages ago where you couldn’t mix both originMessage and promptAnswersXML, but I’m pretty sure that was fixed in 9.0. If not, you’ll have to just use elementsPromptAnswers for your other 3 prompts.

      If you look at the XML generated for your hierachy prompt, you should see where your answer is. If you picked like “Southwest” region, just replace the “Southwest” part with the autotext for the attribute, which is the syntax I provided earlier. If it’s not working still, email me the full syntax that you’re using including the promptAnswersXML string (my email can be found in the Ask Bryan link on the right).

  11. I just wanted to add a little tip to this great post. If you need to submit data using the Prompts Answer XML (which I did for a hierarchical tree prompt), you can POST all your form parameters to the report (typically Main.aspx) rather than GET which eliminates the URL length limit.

    • Bryan says:

      I think I tried that a long time ago in 8.x and couldn’t get it to work, and MicroStrategy support said it wasn’t possible. If you’ve managed to get it to work, I’d love to see an example of the method. Shoot me an email and let’s discuss!

    • I am investigating something similar right now. Is it possible using POST in version 9.2/9.3

    • I use JS to create a dynamic form and then I submit that form targeting an iframe. The form content consists of the following:

      <form id=”formName” action=”**REPORT URL**” target=”reportIFrame” method=”post”>
      <input name=”Project” type=”hidden” value=”**PROJECT NAME**” />
      <input name=”usrSmgr” type=”hidden” value=”**SESSION ID**” />
      <input name=”Server” type=”hidden” value=”** MICROSTRATEGY SERVER NAME**” />
      <input name=”hiddenSections” type=”hidden” value=”header,path,footer” />
      <input name=”visMode” type=”hidden” value=”0″ />
      ————————————————————–
      Then, if you wish to run a Document, you need to use…

      <input name=”documentID” type=”hidden” value=”**DOCUMENT ID**” />
      <input name=”evt” type=”hidden” value=”2048001″ />
      <input name=”src” type=”hidden” value=”Main.aspx.2048001″ />
      <input name=”currentViewMedia” type=”hidden” value=”2″ />

      If you wish to run a Report…

      <input name=”reportID” type=”hidden” value=”**REPORT ID**” />
      <input name=”evt” type=”hidden” value=”4001″ />
      <input name=”src” type=”hidden” value=”Main.aspx.4001″ />
      <input name=”reportViewMode” type=”hidden” value=”1″ />

      —————————————————————–
      Finally, you can use a combination of of valuePromptAnswers, elementsPromptAnswers, objectsPromptAnswers, and promptsAnswerXML.

      You create a new hidden input field for each one you wish to submit, e.g.
      <input name=”valuePromptAnswers” type=”hidden” value=”South^7″>
      <input name=”elementsPromptAnswers” type=”hidden” value=”AttributeGUIDFirst;AttributeGUIDFirst:Value,AttributeGUIDSecond;AttributeGUIDSecond:Value”>
      <input name=”objectsPromptAnswers” type=”hidden” value=”ObjectGUID~ObjectTypeID~ObjectName”>
      <input name=”promptsAnswerXML” type=”hidden” value=”%3Crsl%3E%3Cpa%20pt%3D%223%22%20pin%3D%220%22%20did%3D%22340788BD41D30090F7168AAC5ABFCB35%22%20tp%3D%2210%22%2F%3E%3C%2Frsl%3E”>

      The ability to POST is a lifesaver when having to submit large amounts of promptsAnswerXML as was the case in the application I created.

    • Hello Chris, I tried your Solution in an html-container and it seems to be the solution for my document. The only thing I couldn’t find out is how to get the **SESSION ID**. Any ideas?

  12. Sourav says:

    Hello Bryan ,

    This is very useful. I have a typical requirement.
    I want to run a report with url api.
    The target report has few object prompts with default answers.
    It also has primary prompt(object prompt) and secondary prompt(element prompt).
    I want to do three things togeather in a single url .
    1. Answering a primary object prompt.
    2. Not exposing the prompt screen to users ( which can contain other prompts with default answers).
    3. Answer the secondary prompt ( element prompt).
    Can we achieve all of the above together ?

    • Bryan says:

      I don’t see why not. If you craft the URL such that it was assuming both of the prompts were primary, does it not work?

    • Hi Bryan,

      Did Sourav ever answered your question? I think I am in a similar situation and I cannot get this to work. I have a document in MicroStragy that I would like to run using a URL. The document has an object prompt for a list of filters, and the filters in turn will have element prompts. I could successfully code a URL to display the filter that I want to use from the object list, but could never pass in the element prompts answers for the actual filter values itself. I am using a URL similar to this:

      http://mysite.com/mstrWeb?Server=Serverxxx&Project=Projxxx&Port=0&evt=2048001&src=mstrWeb.4001&reportViewMode=1&documentID=Docxxx&objectsPromptAnswers=xxx~1~Objectxxx&elementsPromptAnswers=zzz;zzz:Value_element

      Is what I am trying to do possible? Any Ideas?

      Thanks

      Austin

    • Bryan says:

      So you have an object prompt that contains a filter that contains a prompt? So if you choose the filter from the object prompt on the first page, you want to set the value of the filter prompt on the second page? Doing it the way you’ve shown looks like it would work to me, but it wouldn’t surprise me if it didn’t.

      Another approach you can try is to run your document like normal and then add a textbox on it with the code {&PROMPTXML}. this will print out the xml answer string for the prompt. You can then try passing this via the URL via &promptAnswersXML= and see if that comes out differently.

  13. Adi says:

    Hello Bryan,

    I am having report which returns more than 10K data rows. When I try to export it to plain text format from Web it shows error as Http 403 because it blockes some special characters by siteminder which is in encoded form as %3 in my URL.
    however when I try to export report having less than 3k data rows it works fine.

    I am not sure how this URL with special characters is getting formed if Data rows are more than 3k.

    Can you help in this.

    Thanks.

    • Bryan says:

      Not sure, I’ve never heard of that. I’m surprised that the URL would be different based on row count, but perhaps it’s some additional parameter that says “export all pages” or something. In any case, it’s not going to be something you can change, so your best bet is to see if there’s a way to add an exception to Site Minder or something.

  14. Hello Bryan, i want to send a selected value from a selector, im using &elementsPromptAnswers=AttributeGUID;AttributeGUID:{AttributeName@ID} but value must be the selected by the user, and it always send me the first one, not the selected

  15. Chris says:

    Hello Bryan,

    I would like to pass customer IDs as prompt answers from another application. When I use the elementsPromptAnswers an error message appears which says that the attribute is locked for browsing. IDs are all locked in our schema. Can I pass multiple values with Value Prompts? Or do you have an idea how I could achieve this?

    Thank you for your great blog!

    Chris

    • Bryan says:

      I’ve never actually used attribute locking, but it’s surprising that it affects answering prompts through the URL. You can use Value Prompts, just use a ^ to separate multiple values. Multiple value prompts will be answered in order.

  16. Maciek says:

    Hi Bryan,

    You wrote: “The valuePromptAnswers macro doesn’t support the ability to pass an empty answer”.

    You may be covering it somewhere else, but anyway you can do this using promptAnswerMode parameter in your URL.

    1 – Answers all required prompts and optional prompts with default answers. Required prompts without any default answers remain open while optional prompts without default defaults answers are closed with an empty answer.

    2 – Closes all optional prompts with an empty answer.

    • Bryan says:

      Thanks for the tip, I haven’t seen this option before. Hopefully this only applies to unanswered prompts. Here’s the full tech note.

      • Pooja says:

        promptAnswerMode=1 works in web, but does not seem to work in mobile. I still see prompt page on the Ipad. Is this a known bug?

    • Maciek says:

      It does only apply to unaswered prompts. I’m using this on a project to pass an empty value for one of the prompts in my url api, to get the ‘All’ value for that attribute.
      example:
      valuePromptAnswers=Answer1^Answer2^^Answer4^Answer5

    • Pooja says:

      promptAnswerMode=1 works in web, but does not seem to work in mobile. I still see prompt page on the Ipad. Is this a known bug?

  17. Stu Wie says:

    Hi Bryan –
    Here’s a question I posed on the discussion forums. Long story short, I am unable to pass more than one value from a selector over to the prompted target document.
    The selector targets a panel stack which has a hyperlink.

    https://resource.microstrategy.com/forum/ReplyListPage.aspx?id=27159

  18. Hello,

    I have the following Drill XML:

    <drt><dres/><gd x=”100″ y=”100″ dots_per_inch=”96″/><da/><wds wsr=”1″ wsc=”1″ wmr=”-1″ wmc=”-1″ grsr=”1″ grsc=”1″ grmr=”-1″ grmc=”-1″/></drt>

    How can I include it in Task URL in order to obtain Grid of the report with drilling being taken into account?

    Regards

    • Bryan says:

      I’ve never seen that XML before, but I’m not sure what you mean. Are you trying to link to a report and perform the first drill (which adds a filter and additional attribute)? It may be easier to just use prompts instead.

    • Thanks for your reply. I am working with Report Instances. This XML was generated by the following code:

      // result object is a WebReportInstance
      WebDrillInstance drillInstance = result.getDrillInstance();
      WebDrillActions drillActions = drillInstance.getDrillActions();
      WebGraphCoordinatesDrillAction action = (WebGraphCoordinatesDrillAction) drillActions .add(EnumDSSXMLDrillType.DssXmlDrillToGraphCoordinates);

      action.setXPixel(100);
      action.setYPixel(100);

      result = drillInstance.drill();


      The objective is to allow drilling by clicking on the graph PNG image. Basically I am doing a work-around and nonuniform approach: for diagram image I use result.getGraphObject() while the HTML table I obtain thanks to URL API (as I am not able to generate proper HTML structure of more complex tables [still not solved the exception of casting – TagImpl and AnchorTag conflict]).

      I tried to do it by prompts, but the XML of the resulting ReportInstance is empty:

      It mas seem strange, but I must render HTML of a report on a website and allow some interaction without any Microstrategy iframe.

      Regards

    • This empty: <mi lcl=”3082″><in/></mi>

    • SOLVED. My method was not good at all.

      Instead of passing prompts or trying to drill I pass the msgID instead of reportID, it’s elegant or work perfect.

      //Where report is WebReportInstance

      String lastMsg = report.getMessageID();

      String urlString = “http://localhoist/MicroStrategy/asp/TaskAdmin.aspx?taskId=reportExecute&taskEnv=xml&taskContentType=xml&sessionState=”
      + sessionState
      + “&styleName=ReportGridStyle”;

      if(lastMsg==””) urlString += “&reportID=”+ reportID;
      else urlString += “&msgID=” + lastMsg ;

    • Bryan says:

      Awesome, thanks for coming back to share the solution.

  19. Hi Bryan,

    Firstly, Thank you very much for the post. I have one requirement, I need to Link a textbox to Information window in Express mode using URL APIs. Please let me know if this is possible. Also please direct me to appropriate Technical note.

    Thanks in advance.

    • Bryan says:

      It’s not possible with URL API. It’s a supported feature in 9.3.1 I believe, or you can do it in a prior version with some JavaScript hackery in an HTML Container.

  20. Gerhard Kerl says:

    Hi Ryan,
    you really made my day with this post, thank you very much for that.
    I have a requirement on the result side that makes me quite mad: I get a column back with quite small numbers like 0,000000143 (there can be quite a few 0’s more) as values. The guys that built the microstrategy report just didn’t limit the decimals so when I run the report in MS Excel with Microstrategy Office all is well and I get very small values in a decent precision.
    When I run the same report with the same prompts with .NET via moioffice API I get *no* decimals at all, so the values are all coming back as ‘0’ or ‘-0’.
    Is there any chance to set the decimals formatting on the result side to something like 10 or 15?
    I search for quite a while now but can’t find anything.
    Thanks a lot in advance.

    • Bryan says:

      Not through the URL. And if it’s returning with the full decimals everywhere except Web Services, then it kind of sounds like a bug with Web Services. If you set the formatting in the report, it should carry over there. The only other thing you can try is to also set the formatting on the metric itself. If neither work, then file a bug with MicroStrategy tech support.

    • Gerhard Kerl says:

      Thank you for your prompt reply – I feared as much. We will define the metrics in the Microstrategy reports with a fixed sufficient number of decimals, this seems to work.
      Thanks again for your work here!

  21. jerowland17 says:

    Hey Bryan,

    I’m trying to figure out if there is a way to connect an external web page that collects answers from the user to a MSTR report/dataset. I was hopeing that URL API would be the way to go to pass the answers and then kick the report of automatically(so when the user clicks the run report button on the web page they aren’t taken to MSTR prompts but the actual MSTR Report). Is that correct or is URL API only usable in documents. Sorry if this post is unclear, I am a newbie at MSTR.

  22. taniya says:

    Hi Bryan,

    Need some information. Apart from the Attribute Selector (Site Attribute) on the dashboard, we have a date prompt with a data range criteria using between operator.
    Need to pass the prompt value from the Main Report to the grid report.
    Since the Attribute GUID Id is same, only one value is getting passed. Please suggest any approach.

    Below is the hyperlink information tried:
    http:///MSTRWReporting/asp/Main.aspx?Server=&Project=&Port=0&evt=4001&src=Main.aspx.4001&reportViewMode=1&reportID=&valuePromptAnswers={[Site]@ID}&elementsPromptAnswers=093EB2A842C15F6EA5DAA0A86FEFF953First;093EB2A842C15F6EA5DAA0A86FEFF953First:Value,093EB2A842C15F6EA5DAA0A86FEFF953Second;093EB2A842C15F6EA5DAA0A86FEFF953Second:Value

    Let me know in case I am going wrong somewhere.

    • Bryan says:

      You could create two derived metrics which are min(date) and max(date) in your dataset. Then, put this url/textbox inside a panel and target that panel with your selector. When you craft your url, you could then use {[min date]} and {[max date]}.

    • taniya says:

      Not working as expected. Basically want to pass the prompt value from Document to hyperlink report which has the same prompt.
      The prompt is on a Date column using between clause.

      Please suggest.

  23. Hello Bryan!

    Tanks for that usefull article.

    I have one question, is posible take prompt’s selected value? My scenerio is like that: I have a prompt on my Date attribute. I need to parse that and take the “year” of that date and last filter another field with it. I.E.: if I select: ’05/30/2013′, I must filter another attribute with “year(’05/30/2013′)”.

    It is possible?

    Thanks for your time!

    Regards,
    Fabián

  24. Chad Peters says:

    Bryan –

    Is there a similar means to set a view filter on a given document?

  25. Penn says:

    We are trying to answer an Object Prompt through the URL API. There is only one attribute that we want to either display or not display. If we answer the prompt with the guid of the attribute when we want it to be displayed it works fine, but if we don’t want it to be displayed, we can’t seem to figure out what to pass. If we pass another valid guid that is unrelated, it seems to not display the optional one but that seems confusing and could cause problems later if we make that attribute optional.

    Any help would be greatly appreciated. Thanks, Wayne

  26. Faizan says:

    Hi Bryan,

    I am trying to integrate sharepoint 10 with Microstrategy 9.3, and successfully done it.

    Now i want to answer the prompt in microstrategy report dynamically based on sharepoint user login

    Can we achieve this ?Also i need to remove home page and all other options from toolbars except export and print options. I use guest user as login .

    please advise me how to proceed

  27. Lefyer Li says:

    Hi Bryan,

    I am a rookie. I am trying to pass the answers to report in URL link. and here is my link:
    https://mstr.xxxx.com/MicroStrategy/asp/Main.aspx?evt=4001&src=Main.aspx.4001&reportID=2F87A11447EB8275C6854CA2BCFFFE2D&server=HQAPP01&Project=MyProject&port=0&share=1&elementsPromptAnswers=7BE4956247051D734B5247BBB5C4D4E7;7BE4956247051D734B5247BBB5C4D4E7:2013-44:%20%2810/27%20-%2011/02%29,A0B1DE9941422118D7C65A911CF5F126;A0B1DE9941422118D7C65A911CF5F126:value 2;A0B1DE9941422118D7C65A911CF5F126:Value 1,646E7E8D46DBDAAAC248F090EC7DF4CF;646E7E8D46DBDAAAC248F090EC7DF4CF:GD,1A0256BE4F35DE7ED5B12CBE7D579F7A;1A0256BE4F35DE7ED5B12CBE7D579F7A:Approved

    But it did not execute automatically, Prompts still came out with previous(default) values. Why did it not work?

    By this way, is it possible to run the report use cmdmgr and export to excel, no need to open the report? If so, how to do this? Please advise.

    Thank you very much!!

  28. Gurunath says:

    Hi Bryan,

    Under Element Prompts passing values dynamically, we need to pass the AttrGUID for every value as you have stated above.
    How can I pass ALL the values from a single selector to the new dashboard ?
    Also how can I pass ALL the values from multiple selectors to the new dashboard ?

    Please assist.

    Guru

  29. Sonal says:

    Hi, I have a scenario where I want to click on the attribute value of a microchart grid widget and pass the clicked value to another document which is taking it as a prompt? Can any one help me how can I do it?
    I tried using value prompt but when I run the documents, I am getting the prompt window. The attribute selected is not taken up automatically.
    Also, I tried using element list but it is generating the wrong SQL and giving the prompt window even if I have selected “Answer dynamically”.

  30. Andrea says:

    Hi Bryan, great job, it’s very helpful.
    I have a question for you:
    I have a document with a prompt (no matter what type of prompt is i guess) and the prompt has a default value. I want to build an URL that opens the document (not passing from the prompt-screen) just with the default value without passing anything. It’s possible? Thanks in advance.

    • bryan says:

      I’m not sure. If you just pass a blank for an answer it’ll resolve the prompt with nothing selected, but that could actually be the default value (where most prompts have nothing selected by default). You could try that and see.

  31. Huilun says:

    Hi Bryan,

    Thank you for this helpful blog.

    I have a questions that is related to VI Dashboard and object prompts. I have report which consists of several object prompts as an interface for my users. And the users should be able to create their reports & dashboards after selecting answers to the prompts. I find that it will bring down the web server if a user save a report as prompted and later, create a dashboard using this report. I know this is a known issue here https://resource.microstrategy.com/support/Authoring/DisplayTN.aspx?tnkey=43983&formatted=1. My concern is, there is still a possibility that one day a user forgets about this and the web interface does not prevent the user from creating the dashboard anyway. So basically any user can cause the web server to shut down which is a pain for the administrator. Is there a way to avoid this issue? Thank you!

  32. Petra says:

    Hi Bryan

    We are running on MSTR 9.1. We have a report that we send to history list. This report has a date prompt of today -1. The report runs fine but when you open an earlier report from the history list the prompt seems to dynamically show the prompt on the report as current date -1 with opposed to the execution -1. I know this has been fixed in 9.3 but is there a work around as our users will not sign off until this is fixed.

    Many Thanks
    Petra

  33. Shefali says:

    Hi

    I have 2 prompts one is element prompt and other is expression prompt.
    I have designed dashboard when dashboard extracted in pdf it should provide link to the dashboard.
    Can you please let me know what URL i must provide in properties?

  34. Lian says:

    Hi Bryan,
    thanks for this post, it was very helpfull.
    I have a question you about dynamic text in url api:
    my url is in an iframe object inside a document that has prompts of it’s own, the report in the Iframe and the parent document has one promp that is the same, and I want to answer the url api promp with the answer that the user gave on the parent document. is that possible? something like this maybe?
    mstrWeb?evt=2048001&src=mstrWeb.2048001&documentID=5EB5DF2D11E4869B00000080EF951AED&visMode=0&port=0&share=1&hiddensections=path,dockTop,dockLeft,footer&valuePromptAnswers={[Account Name]}

    sorry it’s a bit complicated, hope you got it.
    Thanks!

    • Nabil says:

      hello lian i have the same problem.
      i’m not able to pass parameter from parent to child dashboard (child doc = ifram in the parent dash).
      I try to use originMessageID but it doesn’t work.
      how have you solve this problem ?
      Thanks

  35. Aasif says:

    Bryan,

    I am trying to use element prompts to send values to a Microstrategy Report. When I use the following URL, I still get prompted for the prompt values. I am not sure what to do at this point.

    https://coemstr-dev.bankofamerica.com/MicroStrategy/servlet/mstrWeb?Server=LCDRE2PIEAPD1.USCDRWF.AMRS.BANKOFAMERICA.COM&Project=Preferred Rewards&Port=34952&evt=4001&src=mstrWeb.4001&reportID=29A648824FFD11F97ADA829FB89464F4&visMode=0&reportViewMode=1&elementPromptAnswers=13A482B1463F251C6FE223A7F2E8CFD2;13A482B1463F251C6FE223A7F2E8CFD2:Pacific Northwest Region;13A482B1463F251C6FE223A7F2E8CFD2:Metro New York / Mid-Atlantic Region,5EB7C6874497D66079FD09BE7502AC3C;5EB7C6874497D66079FD09BE7502AC3C:2013-01-11

    Any assistance you can provide would be greatly appreciated.

    Thanks.

  36. Benjamin Qi says:

    Hi Bryan,

    I am trying to pass promptAnswerXML in applysimple. The script as below:
    ApplySimple(“‘‘&#1&’‘”, [REGION_ID], [REGION_NAME])
    However, it’s not work. The promptAnswerXML can be passed in ApplySimple?
    Any help would be greatly appreciated. Thanks! Ben

  37. Venkat says:

    Thank Bryan for sharing this info..!! it is really helpful

    -Venkat

  38. Moacir says:

    Is there another way to access a dashboard with guest User, without being the link?

  39. al says:

    This is quite useful thanks!

    But I still need to know how to IMPORT that data. In other words, how to show it at the target dashboard/report/whatever. It┬┤d be great if the dashboard could behave differently according to the values received, like for example showing data from just one country, from just one date, etc. Thanks!

Leave a Reply

Your email address will not be published. Required fields are marked *