cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Helpful
Responsive Resident
Responsive Resident

Adding licensing information to an existing solution

Hi All, I'm thrilled that Microsoft is adding something to support licensing ISV apps distributed through AppSource. That being said, in its current state it's pretty confusing and the documentation does not provide much clarity on the what or how of this feature.

 

As an ISV, here's my understanding of this feature in its current form:

  • It DOES:
    • Restrict AppSource deployment of model-driven apps to only those tenants that are registered by the ISV in Partner Center
    • Allow customers to assign licenses to individual users from within their own M365 Admin Center
    • Once deployed, restrict access of ISV model-driven apps to users that are assigned a license
  • It DOES NOT:
    • Allow ISVs to add licensing to existing AppSource offers
    • Allow ISVs to add licensing to packages built with current Power Apps Build Tools (v1.0.23)
    • Allow import of unmanaged solutions that include service plans
    • Allow customers to purchase licenses at the time of clicking "Get it Now"

We have an existing offer in AppSource. It has a model-driven app and no code components. We have full ALM automation built out in Azure DevOps and everything runs pretty smoothly. We're small so making changes in an unmanaged environment and then committing to repo works for us. All deployments are automated. The only time we mess with Visual Studio is to package for AppSource. We never open command line tools.

 

Here's a little recap of my experience attempting to implement and evaluate this:

  • Copy an existing AppSource offer - this is mostly cut/paste exercise, however, it will mean the back/forth of approvals with AppSource... content, tech, and co-sell material. Also updating any marketing links to the new offer if published.
    • Add a plan to the new offer. Note the "Plan ID", you'll need it later.
  • Go to the solution in my unmanaged environment and add a "Service Plan" component - just kidding we read the steps before that: Add licensing information to your solution

Here's where things slowed down. The first step says "Clone existing solution". In our world, that means go into the unmanaged Power Apps maker environment, select the solution and click "Clone a patch" or "Clone solution". This is not what they mean and it's confusing.

  • The documentation is referring to command line tools that we don't have (Power Apps CLI) - get those.
  • Using the clone command of the Power Apps CLI does not appear to make much sense for us since we already store our unpacked, unmanaged solution files in ADO. So I download those an unzip them locally.
  • Create licensing files - two CSV files. Do not get confused by file names in the screenshots - they actually need to be ".csv" files.
  • Add the licensing information to the solution using the specified Power Apps CLI command.
    • Take a look at what that command did. Comparing the modified solution files with an old set for reference, we can see that it:
      • added a folder called "ServicePlans" (right between Roles and WebResources).
      • added two Xml files (documented below) to the new folder, populated with the values from your .CSV files.
      • added two empty nodes "<serviceplans /><serviceplanappmodulesset />" to the Customizations.xml file in the "Other" folder.
    • Had I known they needed a folder with a specific name and two files with specific names I could have done that without the extra steps.
  • Build the solution. Here's where we get stuck. The documentation for this is particularly confusing: Create a managed solution for your app
    • We have DevOps automation to build solutions so we branch our unmanaged solution, apply the changes (noted above) in the repo and use our existing automation to build a managed package.
    • Open the resulting ZIP file and the empty nodes are now represented in the Customizations.xml file, however, the two files are nowhere to be found in either the Managed or Unmanaged solution package.
      • Is there some other tool we're supposed to use to ensure those files are picked up?
    • With input from @rajyraman, we discovered that the Package Solution task of the current version of the Power Apps Build Tools is not using the latest version of SolutionPackager and, therefore, does not generate the service plan content in Customzations.xml.
    • Use SolutionPackager on command line as workaround to package both Unmanaged and Managed solutions. Confirmed the service plan XML is incorporated into Customizations.xml.
  • Tested import of unmanaged solution that has service plan information to a clean environment. This fails with the following message: "Solution "ISV Solution" failed to import: ServicePlanAppModules data can only be changed by managed solution import".
  • Package for new AppSource offer and evaluate - Update below. WE'RE PAUSING HERE FOR NOW. Hoping we see updates that make it more manageable with our existing ALM setup.

 

Looking forward to this being more supportable. As of right now, it doesn't seem to be compatible with the ALM tools in Azure DevOps that we rely on.

 

ServicePlans.xml content:

 

 

 

<?xml version="1.0" encoding="utf-8"?>
<serviceplans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <serviceplan name="[SERVICE_PLAN_ID]">
    <accessmode>4</accessmode>
    <iscustomizable>0</iscustomizable>
    <displayname>[SERVICE_PLAN_NAME]</displayname>
    <moreinfourl>[YOUR_ISV_PLAN_INFO_LINK]</moreinfourl>
  </serviceplan>
</serviceplans>

 

 

 

ServicePlanAppModules.xml content:

 

 

 

<?xml version="1.0" encoding="utf-8"?>
<serviceplanappmodulesset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <serviceplanappmodules>
    <iscustomizable>0</iscustomizable>
    <appmoduleid>
      <uniquename>[MODEL_APP_COMPONENT_NAME]</uniquename>
    </appmoduleid>
    <serviceplanid>
      <name>[SERVICE_PLAN_ID]</name>
    </serviceplanid>
  </serviceplanappmodules>
</serviceplanappmodulesset>

 

 

 

 

Documentation references:

 

13 REPLIES 13
rajyraman
Continued Contributor
Continued Contributor

@Helpful- That XML is actually in the customizations.xml after you package the solution folder using the Solution Packager tool.

rajyraman_1-1620277564909.png

 

rajyraman_0-1620277530130.png

 

Thanks, @rajyraman. Our solution is built using Power Platform Build Tools in Azure DevOps and the XML shown above does not appear in the Customizations file.

I thought the build tools used Solution Packager behind the scenes so would assume the same behavior as if we built with SolutionPackager, but maybe that’s a bad assumption.

I’ll test this tomorrow.

rajyraman
Continued Contributor
Continued Contributor

@Helpful- Check the version of Solution Packager being used from the AzDO logs. The one I use on the local machine is 9.1.1.2.

Thanks, @rajyraman. Sure enough, it looks like Power Apps Build Tools is using Version 9.1.0.67.

We packaged with command line and are now seeing the service plan xml nodes populated in Customizations.xml.

I guess we'll wait for the tooling to catch-up. I recall the team that was working on those was getting a fair amount of investment a year ago, but perhaps priorities have shifted.

malkhawaja
Advocate III
Advocate III

Hi @Helpful,
Thanks for the elaborate feedback... my experience was almost exactly the same, as I stuck also to pack the managed solution, then eventually found it in the SolutionPackager Command Line.

now I submitted my package for publish in AppSource, and waiting for certification.

@Helpful - As an ISV, we have a very similar dev process to you, using Azure DevOps with automated deployments to customer-specific dev environments and production environments.  Azure DevOps build tools do not currently support including the LMS as you point out, although we've communicated the need to the team responsible for the build tools. 

 

The PAC CLI does nothing other than generate the xml from the csv mapping files, and then adds it to the end of your managed solution.  The folders with the csv files don't need to be in the final solution.  Once you have that xml generated, you can copy it into the managed solution directly.  When we first got started we didn't use the PAC CLI at all and just created the service plans and mapping directly in xml, and then added to our managed solution. 

 

Editing service plan information is currently not supported with an unmanaged solution for the obvious security reasons (though this may change at some point) - this means that you have to add it every time you export a managed solution from your dev environment.  We added a powershell step in our devops pipeline to add the xml to the managed solution when we pull from core dev prior to deploying the managed solutions to customer-specific dev and production environments. 

Thanks @Captjoemcd ,

 

Here's a snip of powershell to get others started. The two files it uses are the customizations.xml file that is in the "Other" folder when you unpack the solution. (I unpacked it into a folder called "tempforpacking" of course.) The license.xml file is just the license specific section of the xml that the pac cli generates. I haven't added checking to ensure the nodes were added yet, but that should be straight forward.

 

Write-Host "starting script"
Write-Host "getting license.xml and custimizations.xml"
[xml] $orig = Get-Content '.\tempforpacking\Other\Customizations.xml'
[xml] $lic = Get-Content '.\license.xml'

Write-Host "adding license.xml to custimizations.xml"
$orig.ImportExportXml.AppendChild($orig.ImportNode(($lic.ImportExportXml.serviceplans),$true))
$orig.ImportExportXml.AppendChild($orig.ImportNode(($lic.ImportExportXml.serviceplanappmodulesset),$true))

Write-Host "saving modified customizations.xml file"
$orig.Save('.\tempforpacking\Other\Customizations.xml');

Hi Folks,
             I am the PM that worked adding the licensing capability.  I would really like to understand the paradigm a little bit better on how you want licensing to be part of the CI/CD process. I did have an exchange with Jeff in a seperate thread. But I would like to understand the broader sentiment and the CI/CD workflow in question. 

When you respond, please @ me directly so that I can get notified.

Hi @kartikka, thanks for the opportunity to provide feedback. I will speak on behalf of our setup and am curious to hear the perspective of others.

 

Please see attached image. To make this work:

  1. License Plans can be added as components to an unmanaged solution.
  2. SolutionPackager needs a switch that optionally applies licensing for managed solutions.
  3. Power Platform Build Tools' Package Task needs to be updated to use the new SolutionPackager with "Include Licensing" option for managed solutions (default is false).

ci_cd.png

We have the approach above implemented today, but some of Step 4's tasks could be cleaned-up to use Build Tools instead of PowerShell.

Helpful resources

Announcements

Community will be READ ONLY July 16th, 5p PDT -July 22nd

Dear Community Members,   We'd like to let you know of an upcoming change to the community platform: starting July 16th, the platform will transition to a READ ONLY mode until July 22nd.   During this period, members will not be able to Kudo, Comment, or Reply to any posts.   On July 22nd, please be on the lookout for a message sent to the email address registered on your community profile. This email is crucial as it will contain your unique code and link to register for the new platform encompassing all of the communities.   What to Expect in the New Community: A more unified experience where all products, including Power Apps, Power Automate, Copilot Studio, and Power Pages, will be accessible from one community.Community Blogs that you can syndicate and link to for automatic updates. We appreciate your understanding and cooperation during this transition. Stay tuned for the exciting new features and a seamless community experience ahead!

Summer of Solutions | Week 4 Results | Winners will be posted on July 24th

We are excited to announce the Summer of Solutions Challenge!   This challenge is kicking off on Monday, June 17th and will run for (4) weeks.  The challenge is open to all Power Platform (Power Apps, Power Automate, Copilot Studio & Power Pages) community members. We invite you to participate in a quest to provide solutions in the Forums to as many questions as you can. Answers can be provided in all the communities.    Entry Period: This Challenge will consist of four weekly Entry Periods as follows (each an “Entry Period”)   - 12:00 a.m. PT on June 17, 2024 – 11:59 p.m. PT on June 23, 2024 - 12:00 a.m. PT on June 24, 2024 – 11:59 p.m. PT on June 30, 2024 - 12:00 a.m. PT on July 1, 2024 – 11:59 p.m. PT on July 7, 2024 - 12:00 a.m. PT on July 8, 2024 – 11:59 p.m. PT on July 14, 2024   Entries will be eligible for the Entry Period in which they are received and will not carryover to subsequent weekly entry periods.  You must enter into each weekly Entry Period separately.   How to Enter: We invite you to participate in a quest to provide "Accepted Solutions" to as many questions as you can. Answers can be provided in all the communities. Users must provide a solution which can be an “Accepted Solution” in the Forums in all of the communities and there are no limits to the number of “Accepted Solutions” that a member can provide for entries in this challenge, but each entry must be substantially unique and different.    Winner Selection and Prizes: At the end of each week, we will list the top ten (10) Community users which will consist of: 5 Community Members & 5 Super Users and they will advance to the final drawing. We will post each week in the News & Announcements the top 10 Solution providers.  At the end of the challenge, we will add all of the top 10 weekly names and enter them into a random drawing.  Then we will randomly select ten (10) winners (5 Community Members & 5 Super Users) from among all eligible entrants received across all weekly Entry Periods to receive the prize listed below. If a winner declines, we will draw again at random for the next winner.  A user will only be able to win once overall. If they are drawn multiple times, another user will be drawn at random.  Individuals will be contacted before the announcement with the opportunity to claim or deny the prize.  Once all of the winners have been notified, we will post in the News & Announcements of each community with the list of winners.   Each winner will receive one (1) Pass to the Power Platform Conference in Las Vegas, Sep. 18-20, 2024 ($1800 value). NOTE: Prize is for conference attendance only and any other costs such as airfare, lodging, transportation, and food are the sole responsibility of the winner. Tickets are not transferable to any other party or to next year’s event.   ** PLEASE SEE THE ATTACHED RULES for this CHALLENGE**   Week 1 Results: Congratulations to the Week 1 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Community MembersNumber of SolutionsSuper UsersNumber of Solutions @anandm08  23 @WarrenBelz  31 @DBO_DV  10 @Amik  19 AmínAA 6 @mmbr1606  12 @rzuber  4 @happyume  7 @Giraldoj  3@ANB 6 (tie)   @SpongYe  6 (tie)     Week 2 Results: Congratulations to the Week 2 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Community MembersSolutionsSuper UsersSolutions @anandm08  10@WarrenBelz 25 @DBO_DV  6@mmbr1606 14 @AmínAA 4 @Amik  12 @royg  3 @ANB  10 @AllanDeCastro  2 @SunilPashikanti  5 @Michaelfp  2 @FLMike  5 @eduardo_izzo  2   Meekou 2   @rzuber  2   @Velegandla  2     @PowerPlatform-P  2   @Micaiah  2     Week 3 Results: Congratulations to the Week 3 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge.   Week 3:Community MembersSolutionsSuper UsersSolutionsPower Apps anandm0861WarrenBelz86DBO_DV25Amik66Michaelfp13mmbr160647Giraldoj13FLMike31AmínAA13SpongYe27     Week 4 Results: Congratulations to the Week 4 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge.   Week 4:Community MembersSolutionsSuper UsersSolutionsPower Apps DBO-DV21WarranBelz26Giraldoj7mmbr160618Muzammmil_0695067Amik14samfawzi_acml6FLMike12tzuber6ANB8   SunilPashikanti8

Check Out | 2024 Release Wave 2 Plans for Microsoft Dynamics 365 and Microsoft Power Platform

On July 16, 2024, we published the 2024 release wave 2 plans for Microsoft Dynamics 365 and Microsoft Power Platform. These plans are a compilation of the new capabilities planned to be released between October 2024 to March 2025. This release introduces a wealth of new features designed to enhance customer understanding and improve overall user experience, showcasing our dedication to driving digital transformation for our customers and partners.    The upcoming wave is centered around utilizing advanced AI and Microsoft Copilot technologies to enhance user productivity and streamline operations across diverse business applications. These enhancements include intelligent automation, AI-powered insights, and immersive user experiences that are designed to break down barriers between data, insights, and individuals. Watch a summary of the release highlights.    Discover the latest features that empower organizations to operate more efficiently and adaptively. From AI-driven sales insights and customer service enhancements to predictive analytics in supply chain management and autonomous financial processes, the new capabilities enable businesses to proactively address challenges and capitalize on opportunities.    

Updates to Transitions in the Power Platform Communities

We're embarking on a journey to enhance your experience by transitioning to a new community platform. Our team has been diligently working to create a fresh community site, leveraging the very Dynamics 365 and Power Platform tools our community advocates for.  We started this journey with transitioning Copilot Studio forums and blogs in June. The move marks the beginning of a new chapter, and we're eager for you to be a part of it. The rest of the Power Platform product sites will be moving over this summer.   Stay tuned for more updates as we get closer to the launch. We can't wait to welcome you to our new community space, designed with you in mind. Let's connect, learn, and grow together.   Here's to new beginnings and endless possibilities!   If you have any questions, observations or concerns throughout this process please go to https://aka.ms/PPCommSupport.   To stay up to date on the latest details of this migration and other important Community updates subscribe to our News and Announcements forums: Copilot Studio, Power Apps, Power Automate, Power Pages

Users online (1,601)