Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Documaster.WebApi.Client.Noark5.Client;
using Documaster.WebApi.Client.Noark5.NoarkEntities;

namespace NoarkWsClientSample
{
public class BusinessSpecificMetadataSample
{
private readonly DocumasterClients documasterClients;

public BusinessSpecificMetadataSample(DocumasterClients documasterClients)
{
this.documasterClients = documasterClients;
}

public void GetBusinessSpecificMetadataRegistry()
{
Console.WriteLine($"Get business-specific metadata registry");

NoarkClient client = this.documasterClients.GetNoarkClient();

BusinessSpecificMetadataInfo info = client.BsmRegistry();

foreach (MetadataGroupInfo metadataGroupInfo in info.Groups)
{
Console.WriteLine($"Group: {metadataGroupInfo.GroupName}");
foreach (MetadataFieldInfo metadataFieldInfo in metadataGroupInfo.Fields)
{
Console.WriteLine($"Field: Name={metadataFieldInfo.FieldName}, Type={metadataFieldInfo.FieldType}");
if(metadataFieldInfo.FieldValues != null)
{
//the field has predefined values
Console.WriteLine($"Field values: [{String.Join(",", metadataFieldInfo.FieldValues.ToArray())}]");
}
}
}
}

public void CrudOperationsWithBusinessSpecificMetadata()
{
Console.WriteLine($"Create, update and delete business-specific metadata groups and fields");

NoarkClient client = this.documasterClients.GetNoarkClient();

//Create group
MetadataGroupInfo group = new MetadataGroupInfo("group-applications", "Applications", "Business-specific metadata for applications");
MetadataGroupInfo savedGroup = client.PutBsmGroup(group);
Console.WriteLine($"Created group with group identifier {savedGroup.GroupId}");

//Create fields:
MetadataFieldInfo fieldAppliactionName = new MetadataFieldInfo("app-name", "Application name", "Application name", FieldType.String);
MetadataFieldInfo fieldAppliactionParticipants = new MetadataFieldInfo("app-participants", "Application participants", "Application participants", FieldType.String);
MetadataFieldInfo fieldAppliactionType = new MetadataFieldInfo("app-type", "Application type", "Application type", FieldType.Double, new List<object> { 1, 2, 3 });
MetadataFieldInfo fieldAppliactionSalary = new MetadataFieldInfo("app-salary", "Application salary", "Application salary", FieldType.Long);
MetadataFieldInfo fieldAppliactionDate = new MetadataFieldInfo("app-date", "Application date", "Application date", FieldType.Timestamp);
MetadataFieldInfo fieldAppliactionSecret = new MetadataFieldInfo("app-secret", "Application secret", "Application secret", FieldType.Encrypted);

MetadataFieldInfo savedFieldAppliactionName = client.PutBsmField(savedGroup.GroupId, fieldAppliactionName);
MetadataFieldInfo savedFieldAppliactionParticipants = client.PutBsmField(savedGroup.GroupId, fieldAppliactionParticipants);
MetadataFieldInfo savedFieldAppliactionType = client.PutBsmField(savedGroup.GroupId, fieldAppliactionType);
MetadataFieldInfo savedFieldAppliactionSalary = client.PutBsmField(savedGroup.GroupId, fieldAppliactionSalary);
MetadataFieldInfo savedFieldAppliactionDate = client.PutBsmField(savedGroup.GroupId, fieldAppliactionDate);
MetadataFieldInfo savedFieldAppliactionSecret = client.PutBsmField(savedGroup.GroupId, fieldAppliactionSecret);

Console.WriteLine($"Created fields with filed identifiers {savedFieldAppliactionName.FieldId}, " +
$"{savedFieldAppliactionType.FieldId}, {savedFieldAppliactionDate.FieldId}, {savedFieldAppliactionSalary.FieldId} and {savedFieldAppliactionSecret.FieldId}");

//Fetch and update group
BusinessSpecificMetadataInfo info = client.BsmRegistry(savedGroup.GroupId);
MetadataGroupInfo foundGroup = info.Groups.First();
//Remove one of the fields from the group
foundGroup.Fields.RemoveAt(3);
client.PutBsmGroup(foundGroup);

//Update a field with predefined values - add one more value
savedFieldAppliactionType.FieldValues.Add(4);
client.PutBsmField(savedGroup.GroupId, savedFieldAppliactionType);


//Delete a field
client.DeleteBsmField(savedGroup.GroupId, savedFieldAppliactionSalary.FieldId);

//Delete a group
client.DeleteBsmGroup(savedGroup.GroupId);
}

public void AddAndUpdateBusinessSpecificMetadataToCaseFile(string caseFileTitle)
{
//This example assumes the existence of a bsm group with identifier "group-applications"
//and of several bsm fields.

Console.WriteLine("Add and update business-specific metadata to case file");
NoarkClient client = this.documasterClients.GetNoarkClient();

//Find the file
Saksmappe saksmappe =
client.Query<Saksmappe>("tittel=@title", 1)
.AddQueryParam("@title", caseFileTitle)
.Execute()
.Results
.First();

//Set application name, date, type and secret as business-specific metadata to a case file
saksmappe.VirksomhetsspesifikkeMetadata.AddBsmFieldValues("group-applications", "app-name", "Application for kindergarten place");
saksmappe.VirksomhetsspesifikkeMetadata.AddBsmFieldValues("group-applications", "app-participants", "Alice Smith", "John Doe");
saksmappe.VirksomhetsspesifikkeMetadata.AddBsmFieldValues("group-applications", "app-date", DateTime.Now);
saksmappe.VirksomhetsspesifikkeMetadata.AddBsmFieldValues("group-applications", "app-type", 1);
saksmappe.VirksomhetsspesifikkeMetadata.AddBsmFieldValues("group-applications", "app-secret", "some encrypted content here");

TransactionResponse transactionResponse = client.Transaction()
.Save(saksmappe)
.Commit();

Saksmappe savedCaseFile = transactionResponse.Saved[saksmappe.Id] as Saksmappe;

Console.WriteLine("Added business-specific metadata fields to case file");
foreach(string groupId in savedCaseFile.VirksomhetsspesifikkeMetadata.Keys)
{
Console.WriteLine($"Group with group identifier {groupId}");
foreach(string fieldId in savedCaseFile.VirksomhetsspesifikkeMetadata[groupId].Keys)
{
BsmFieldValues fieldValues = savedCaseFile.VirksomhetsspesifikkeMetadata[groupId][fieldId];
Console.WriteLine($@"Field with field identifier {fieldId}, type {fieldValues.Type}
and values [{String.Join(", ", fieldValues.Values)}]");
}
}

//Delete all field values from the case file
savedCaseFile.VirksomhetsspesifikkeMetadata.DeleteBsmField("group-applications", "app-secret");

//Delete a field value only
savedCaseFile.VirksomhetsspesifikkeMetadata.DeleteBsmFieldValue("group-applications", "app-participants", "Alice Smith");

//Add a new value
savedCaseFile.VirksomhetsspesifikkeMetadata.UpdateBsmFieldValues("group-applications", "app-type", 2);

transactionResponse = client.Transaction()
.Save(savedCaseFile)
.Commit();

savedCaseFile = transactionResponse.Saved[saksmappe.Id] as Saksmappe;

Console.WriteLine("Update business-specific metadata fields of case file");
foreach (string groupId in savedCaseFile.VirksomhetsspesifikkeMetadata.Keys)
{
Console.WriteLine($"Group with group identifier {groupId}");
foreach (string fieldId in savedCaseFile.VirksomhetsspesifikkeMetadata[groupId].Keys)
{
BsmFieldValues fieldValues = savedCaseFile.VirksomhetsspesifikkeMetadata[groupId][fieldId];
Console.WriteLine($@"Field with field identifier {fieldId}, type {fieldValues.Type}
and values [{String.Join(", ", fieldValues.Values)}]");
}
}
}
}
}
14 changes: 12 additions & 2 deletions C#/v1/NoarkWsClientSample/NoarkWsClientSample/DocumasterClients.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,7 @@ private void RefreshAccessToken()

if (this.refreshToken == null)
{
PasswordGrantTypeParams passwordGrantTypeParams = new PasswordGrantTypeParams(this.opts.ClientId,
this.opts.ClientSecret, this.opts.Username, this.opts.Password, OpenIDConnectScope.OPENID);
PasswordGrantTypeParams passwordGrantTypeParams = GetDocumasterIdpGrantTypeParams();
AccessTokenResponse accessTokenResponse =
this.idpClient.GetTokenWithPasswordGrantType(passwordGrantTypeParams);
this.accessTokenExpirationTime = DateTime.Now.AddSeconds(accessTokenResponse.ExpiresInMs);
Expand All @@ -73,6 +72,17 @@ private void RefreshAccessToken()
}
}

private PasswordGrantTypeParams GetDocumasterIdpGrantTypeParams()
{
return new PasswordGrantTypeParams(this.opts.ClientId,
this.opts.ClientSecret, this.opts.Username, this.opts.Password, OpenIDConnectScope.OPENID);
}

private PasswordGrantTypeParams GetAzureGrantTypeParams()
{
return new AzureGrantTypeParams(this.opts.ClientId, this.opts.ClientSecret, this.opts.Username, this.opts.Password, OpenIDConnectScope.OPENID, this.opts.Resource);
}

private void InitIdpClient(Options options)
{
//IdpServerAddress is in the format https://clientname.dev.documaster.tech/idp/oauth2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<IncludeAssets>all</IncludeAssets>
</PackageReference>

<PackageReference Include="Documaster.WebApi.Client.Noark5" Version="0.12.1">
<PackageReference Include="Documaster.WebApi.Client.Noark5" Version="0.14.0">
<IncludeAssets>all</IncludeAssets>
</PackageReference>
<PackageReference Include="Documaster.WebApi.Client.IDP" Version="1.1.0">
Expand Down
3 changes: 3 additions & 0 deletions C#/v1/NoarkWsClientSample/NoarkWsClientSample/Options.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ public class Options
[Option("password", Required = true, HelpText = "Password")]
public string Password { get; set; }

[Option("resource", Required = false, HelpText = "Resource")]
public string Resource { get; set; }

[Option("addr", Required = true, HelpText = "Server address, such as https://clientname.dev.documaster.tech:8083")]
public string ServerAddress { get; set; }

Expand Down
7 changes: 7 additions & 0 deletions C#/v1/NoarkWsClientSample/NoarkWsClientSample/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,20 @@ public static void Main(string[] args)
finalizationSample.FinalizeObjectsInArchive("42", "43", "44", "45");

QuerySample querySample = new QuerySample(documasterClients);
querySample.GetCaseFileByTwoSecondaryClassesUsingJoins("45-67771344-7", "457-66-22-1");
querySample.GetCodeLists();
querySample.GetCaseFilesByExternalId("14", "2344-11", "External system");
querySample.GetCaseFileBySecondaryClass("14", "45503", "John Doe");
querySample.GetRegistryEntriesCreatedInDateRange("14", DateTime.Now.AddDays(-2), DateTime.Now);

FullTextSearchSample fullTextSearchSample = new FullTextSearchSample(documasterClients);
fullTextSearchSample.Search();

BusinessSpecificMetadataSample businessSpecificMetadataSample =
new BusinessSpecificMetadataSample(documasterClients);
businessSpecificMetadataSample.GetBusinessSpecificMetadataRegistry();
businessSpecificMetadataSample.CrudOperationsWithBusinessSpecificMetadata();
businessSpecificMetadataSample.AddAndUpdateBusinessSpecificMetadataToCaseFile("case file title");
}

private static Options ParserCommandLineArguments(string[] args)
Expand Down
23 changes: 23 additions & 0 deletions C#/v1/NoarkWsClientSample/NoarkWsClientSample/QuerySample.cs
Original file line number Diff line number Diff line change
Expand Up @@ -146,5 +146,28 @@ public void GetRegistryEntriesCreatedInDateRange(string seriesId, DateTime fromD
Console.WriteLine($"Registry entry: Id: {registryEntry.Id}. Title: {registryEntry.Tittel}");
}
}

public void GetCaseFileByTwoSecondaryClassesUsingJoins(string secondaryClassIdent1, string secondaryClassIdent2)
{
NoarkClient client = this.documasterClients.GetNoarkClient();

int pageSize = 1;

QueryResponse<Saksmappe> queryResponse =
client.Query<Saksmappe>("#klasse1.klasseIdent=@klasseIdent1 && #klasse2.klasseIdent=@klasseIdent2",
pageSize)
.AddJoin("#klasse1", "refSekundaerKlasse")
.AddJoin("#klasse2", "refSekundaerKlasse")
.AddQueryParam("@klasseIdent1", secondaryClassIdent1)
.AddQueryParam("@klasseIdent2", secondaryClassIdent2)
.Execute();

if (queryResponse.Results.Any())
{
Saksmappe saksmappe = queryResponse.Results.First();
Console.WriteLine($"Found a case file with title '{saksmappe.Tittel}' linked to two secondary classes with klasseIdent '{secondaryClassIdent1}' and klasseIdent '{secondaryClassIdent2}'");
}

}
}
}