Ejemplo n.º 1
0
        public void GetCaseFileBySecondaryClass(string seriesId, string secondaryClassId, string secondaryClassTitle)
        {
            NoarkClient client = this.documasterClients.GetNoarkClient();

            //Note that folders, basic records and registry entries might also be linked to a secondary class.

            List <Saksmappe> caseFiles = new List <Saksmappe>();

            bool hasMoreResults = true;
            int  pageSize       = 30;
            int  offset         = 0;

            while (hasMoreResults)
            {
                QueryResponse <Saksmappe> queryResponse = client
                                                          .Query <Saksmappe>(
                    "refArkivdel.id=@seriesId && refSekundaerKlasse.klasseIdent=@classId && refSekundaerKlasse.tittel=@title",
                    1)
                                                          .AddQueryParam("@seriesId", seriesId)
                                                          .AddQueryParam("@classId", secondaryClassId)
                                                          .AddQueryParam("@title", secondaryClassTitle)
                                                          .SetOffset(0)
                                                          .Execute();

                hasMoreResults = queryResponse.HasMore;
                offset        += pageSize;
                caseFiles.AddRange(queryResponse.Results);
            }

            foreach (Saksmappe caseFile in caseFiles)
            {
                Console.WriteLine($"Case file: Id: {caseFile.Id}. Title: {caseFile.Tittel}");
            }
        }
Ejemplo n.º 2
0
        public void GetCaseFilesByExternalId(string seriesId, string externalId, string externalSystem)
        {
            NoarkClient client = this.documasterClients.GetNoarkClient();

            //Note that folders, basic records, registry entries and document descriptions might also have an external id attached.

            List <Saksmappe> caseFiles = new List <Saksmappe>();

            bool hasMoreResults = true;
            int  pageSize       = 30;
            int  offset         = 0;

            while (hasMoreResults)
            {
                QueryResponse <Saksmappe> queryResponse =
                    client.Query <Saksmappe>(
                        "refArkivdel.id=@seriesId && refEksternId.eksternID=@externalId && refEksternId.eksterntSystem=@externalSystem",
                        1)
                    .AddQueryParam("@seriesId", seriesId)
                    .AddQueryParam("@externalId", externalId)
                    .AddQueryParam("@externalSystem", externalSystem)
                    .SetOffset(offset)
                    .Execute();

                hasMoreResults = queryResponse.HasMore;
                offset        += pageSize;
                caseFiles.AddRange(queryResponse.Results);
            }

            foreach (Saksmappe caseFile in caseFiles)
            {
                Console.WriteLine($"Case file: Id: {caseFile.Id}. Title: {caseFile.Tittel}");
            }
        }
Ejemplo n.º 3
0
        public void GetRegistryEntriesCreatedInDateRange(string seriesId, DateTime fromDate, DateTime toDate)
        {
            NoarkClient client = this.documasterClients.GetNoarkClient();

            List <Journalpost> registryEntries = new List <Journalpost>();

            bool hasMoreResults = true;
            int  pageSize       = 30;
            int  offset         = 0;

            while (hasMoreResults)
            {
                QueryResponse <Journalpost> queryResponse =
                    client.Query <Journalpost>("refMappe.refArkivdel.id=@seriesId && opprettetDato=[@from:@to]",
                                               pageSize)
                    .AddQueryParam("@seriesId", seriesId)
                    .AddQueryParam("@from", fromDate)
                    .AddQueryParam("@to", toDate)
                    .SetOffset(offset)
                    .Execute();

                offset        += pageSize;
                hasMoreResults = queryResponse.HasMore;
                registryEntries.AddRange(queryResponse.Results);
            }

            foreach (Journalpost registryEntry in registryEntries)
            {
                Console.WriteLine($"Registry entry: Id: {registryEntry.Id}. Title: {registryEntry.Tittel}");
            }
        }
Ejemplo n.º 4
0
        private T GetNoarkEntityById <T>(string id) where T : INoarkEntity
        {
            NoarkClient client = this.documasterClients.GetNoarkClient();

            QueryResponse <T> queryResponse = client.Query <T>("id=@id", 1)
                                              .AddQueryParam("@id", id)
                                              .Execute();

            if (queryResponse.Results.Any())
            {
                return(queryResponse.Results.First());
            }

            throw new Exception($"Object of type '{typeof(T).Name}' with id '{id}' was not found!");
        }
Ejemplo n.º 5
0
        private Klassifikasjonssystem GetSecondaryClassificationSystem(string seriesId)
        {
            NoarkClient client = this.documasterClients.GetNoarkClient();

            QueryResponse <Klassifikasjonssystem> queryResponse = client
                                                                  .Query <Klassifikasjonssystem>("refArkivdelSomSekundaer.id=@seriesId", 1)
                                                                  .AddQueryParam("@seriesId", seriesId)
                                                                  .Execute();

            if (!queryResponse.Results.Any())
            {
                return(null);
            }

            return(queryResponse.Results.First());
        }
Ejemplo n.º 6
0
        private Arkivdel GetSeriesByTitle(string title)
        {
            NoarkClient client = this.documasterClients.GetNoarkClient();

            QueryResponse <Arkivdel> queryResponse = client.Query <Arkivdel>("tittel=@title", 1)
                                                     .AddQueryParam("@title", title)
                                                     .Execute();

            IEnumerable <Arkivdel> results = queryResponse.Results;

            if (!results.Any())
            {
                return(null);
            }

            if (queryResponse.HasMore)
            {
                Console.WriteLine($"Found more than two series with title {title}!");
            }

            return(results.First());
        }
Ejemplo n.º 7
0
        private Klasse GetClassByTitle(string classificationSystemId, string title)
        {
            NoarkClient client = this.documasterClients.GetNoarkClient();

            QueryResponse <Klasse> queryResponse = client
                                                   .Query <Klasse>("refKlassifikasjonssystem.id=@ksId && tittel=@title", 1)
                                                   .AddQueryParam("@ksId", classificationSystemId)
                                                   .AddQueryParam("@title", title)
                                                   .Execute();

            IEnumerable <Klasse> results = queryResponse.Results;

            if (!results.Any())
            {
                return(null);
            }

            if (queryResponse.HasMore)
            {
                Console.WriteLine($"Found more than two classes with title {title}!");
            }

            return(results.First());
        }
Ejemplo n.º 8
0
        private static void JournalingSample()
        {
            Console.WriteLine($"Journaling example {Environment.NewLine}");

            //Create a new Arkiv with an Arkivskaper
            //When new objects are initialized, a temporary Id is assigned to them.
            var newArkivskaper = new Arkivskaper("B7-23-W5", "John Smith");
            var newArkiv       = new Arkiv("Arkiv");

            var transactionResponse = client.Transaction()
                                      .Save(newArkiv)
                                      .Save(newArkivskaper)
                                      .Link(newArkiv.LinkArkivskaper(newArkivskaper))
                                      .Commit();

            //When the transaction is committed, the transaction response contains a map with saved objects.
            //One can access the saved Arkiv by providing its temporary Id as a key to the map.
            //Notice that arkiv.Id is the permanent Id of the Arkiv.
            var arkiv = transactionResponse.Saved[newArkiv.Id] as Arkiv;

            Console.WriteLine(
                $"Created Arkiv: Id={arkiv.Id}, Tittel={arkiv.Tittel}, OpprettetDato={arkiv.OpprettetDato}");

            //Update the description of the Arkiv and create a new Arkivdel in it
            //Create a new Klassifikasjonssystem with one Klasse
            //Set the new Klassifikasjonssystem as the primary Klassifikasjonssystem for the Arkivdel
            arkiv.Beskrivelse = "Barnehage Arkiv";
            var newArkivdel = new Arkivdel("2007/8");
            var newKlassifikasjonssystem = new Klassifikasjonssystem("Barnehage");
            var newKlasse = new Klasse("01", "Tilbud");

            transactionResponse = client.Transaction()
                                  .Save(arkiv)
                                  .Save(newArkivdel)
                                  .Link(newArkivdel.LinkArkiv(arkiv))
                                  .Save(newKlassifikasjonssystem)
                                  .Link(newArkivdel.LinkPrimaerKlassifikasjonssystem(newKlassifikasjonssystem))
                                  .Save(newKlasse)
                                  .Link(newKlasse.LinkKlassifikasjonssystem(newKlassifikasjonssystem))
                                  .Commit();

            arkiv = transactionResponse.Saved[arkiv.Id] as Arkiv;
            Console.WriteLine($"Updated Arkiv: Id={arkiv.Id}, Beskrivelse={arkiv.Beskrivelse}");

            var arkivdel = transactionResponse.Saved[newArkivdel.Id] as Arkivdel;

            Console.WriteLine($"Created Arkivdel: Id={arkivdel.Id}, Tittel={arkivdel.Tittel}");

            var klassifikasjonssystemId = transactionResponse.Saved[newKlassifikasjonssystem.Id].Id;
            var klasseId = transactionResponse.Saved[newKlasse.Id].Id;

            //Create a screening code
            Skjerming newSkjerming = new Skjerming(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "Description",
                                                   "Authority");
            Skjerming skjerming = client.PutCodeListValue(newSkjerming);

            //Screen the Arkivdel
            arkivdel.Skjerming  = skjerming;
            transactionResponse = client.Transaction()
                                  .Save(arkivdel)
                                  .Commit();

            //Find the Arkivdel by id
            //By default the service will return null values for all screened fields of screened objects
            //To see the values of screened fields call SetPublicUse(false)
            var queryResults = client.Query <Arkivdel>("id=@arkivdelId", 10)
                               .AddQueryParam("@arkivdelId", arkivdel.Id)
                               .Execute();

            Console.WriteLine($"Found {queryResults.Results.Count()} Arkivdel object(s) with Id {arkivdel.Id}");

            //Print a screened field:
            arkivdel = queryResults.Results.First();
            Console.WriteLine($"Tittel of Arkivdel is masked: {arkivdel.Tittel}");

            //For convenience, objects in query and transaction responses contain the id's of many-to-one reference fields
            Console.WriteLine($"Arkivdel.RefArkiv: {arkivdel.RefArkiv}");
            Console.WriteLine($"Arkivdel.RefPrimaerKlassifikasjonssystem: {arkivdel.RefPrimaerKlassifikasjonssystem}");

            //Create two other Klassifikasjonssystem objects and link them to the Arkivdel as secondary Klassifikasjonssystem
            var sekundaerKlassifikasjonssystemSkole         = new Klassifikasjonssystem("Skole");
            var klasseInSekundaerKlassifikasjonssystemSkole = new Klasse("07", "Report");
            var sekundaerKlassifikasjonssystem2             = new Klassifikasjonssystem("EOP");

            transactionResponse = client.Transaction()
                                  .Save(sekundaerKlassifikasjonssystemSkole)
                                  .Save(klasseInSekundaerKlassifikasjonssystemSkole)
                                  .Link(sekundaerKlassifikasjonssystemSkole.LinkKlasse(klasseInSekundaerKlassifikasjonssystemSkole))
                                  .Save(sekundaerKlassifikasjonssystem2)
                                  .Link(arkivdel.LinkSekundaerKlassifikasjonssystem(sekundaerKlassifikasjonssystemSkole,
                                                                                    sekundaerKlassifikasjonssystem2))
                                  .Commit();

            //We need the id of the saved Klasse for the next transactions
            var sekundaerKlasseId =
                transactionResponse.Saved[klasseInSekundaerKlassifikasjonssystemSkole.Id].Id;

            //Create a new administrativEnhet value
            AdministrativEnhet newAdministrativEnhet =
                new AdministrativEnhet(Guid.NewGuid().ToString(), Guid.NewGuid().ToString());
            AdministrativEnhet administrativEnhet = client.PutCodeListValue(newAdministrativEnhet);

            //Create a new Saksmappe in the Arkivdel
            //The new Saksmappe needs to have a Klasse in the primary Klassifikasjonssystem of the Arkivdel
            //Also link the Saksmappe to a secondary Klasse
            var newSaksmappe = new Saksmappe("Tilbud (Smith, John)", administrativEnhet);
            var newSakspart  = new Sakspart("Alice", "internal");

            var savedObjects = client.Transaction()
                               .Save(newSaksmappe)
                               .Link(newSaksmappe.LinkArkivdel(arkivdel))
                               .Link(newSaksmappe.LinkPrimaerKlasse(klasseId))
                               .Link(newSaksmappe.LinkSekundaerKlasse(sekundaerKlasseId))
                               .Save(newSakspart)
                               .Link(newSaksmappe.LinkSakspart(newSakspart))
                               .Commit()
                               .Saved;

            var saksmappe = savedObjects[newSaksmappe.Id] as Saksmappe;

            Console.WriteLine($"Created Saksmappe: Id={saksmappe.Id}, Saksdato: {saksmappe.Saksdato}");

            //Create another Klasse
            //Unlink the Saksmappe from its Klasse and link it to the new Klasse
            var anotherKlasse = new Klasse("02", "Klage");

            client.Transaction()
            .Save(anotherKlasse)
            .Link(anotherKlasse.LinkKlassifikasjonssystem(klassifikasjonssystemId))
            .Unlink(saksmappe.UnlinkPrimaerKlasse(klasseId))
            .Link(saksmappe.LinkPrimaerKlasse(anotherKlasse))
            .Commit();
            Console.WriteLine(
                $"Unlinked Saksmappe wiht Id {saksmappe.Id} from Klasse '{newKlasse.Tittel}' and linked it to Klasse '{anotherKlasse.Tittel}'");

            //Find all available codes for journalstatus in Journalpost
            var journalstatusCodeList = client.CodeLists(type: "Journalpost", field: "journalstatus").First();

            Console.WriteLine($"CodeList list for {journalstatusCodeList.Type}.{journalstatusCodeList.Field}:");
            foreach (var code in journalstatusCodeList.Values)
            {
                Console.WriteLine($"    Code={code.Code}, Name={code.Name}");
            }

            //Create a new Journalpost in the Saksmappe
            //Create an EksternId object and link it to the Journalpost
            //Create a new Korrespondansepart and link it to the Journalpost
            //Create a Noekkelord (keyword) object and link it to the Journalpost
            var newJournalpost = new Journalpost("Tilbud (Smith, John, Godkjent)", Journalposttype.UTGAAENDE_DOKUMENT)
            {
                Journalaar           = 2007,
                Journalsekvensnummer = 46
            };

            var newEksternId          = new EksternId("External System", Guid.NewGuid().ToString());
            var newKorrespondansepart = new Korrespondansepart(Korrespondanseparttype.INTERN_MOTTAKER, "John Smith");
            var newNoekkelord         = new Noekkelord("keyword");

            savedObjects = client.Transaction()
                           .Save(newJournalpost)
                           .Link(newJournalpost.LinkMappe(saksmappe))
                           .Save(newEksternId)
                           .Link(newJournalpost.LinkEksternId(newEksternId))
                           .Save(newKorrespondansepart)
                           .Link(newJournalpost.LinkKorrespondansepart(newKorrespondansepart))
                           .Save(newNoekkelord)
                           .Link(newNoekkelord.LinkRegistrering(newJournalpost))
                           .Commit()
                           .Saved;

            var journalPost = savedObjects[newJournalpost.Id] as Journalpost;

            Console.WriteLine(
                $"Created Journalpost: Id={journalPost.Id}, Tittel={journalPost.Tittel}, Journalstatus={journalPost.Journalstatus.Code}");

            //Find the Journalpost by the eksternID value
            var journalpstQueryResults = client.Query <Journalpost>("refEksternId.eksternID=@eksternId", 10)
                                         .AddQueryParam("@eksternId", newEksternId.EksternID)
                                         .Execute();

            Console.WriteLine(
                $"Found {journalpstQueryResults.Results.Count()} Journalpost objects with eksternID {newEksternId.EksternID}");

            //Upload a file
            Dokumentfil dokumentfil;

            using (var inputStream = File.OpenRead(testDoc))
            {
                dokumentfil = client.Upload(inputStream, "godkjenning.pdf");
            }
            Console.WriteLine($"Uploaded file {testDoc}");

            //Create a new value for Dokumenttype
            Dokumenttype newDokumenttype = new Dokumenttype(Guid.NewGuid().ToString(), Guid.NewGuid().ToString());
            Dokumenttype dokumenttype    = client.PutCodeListValue(newDokumenttype);

            //Create a new Dokument and Dokumentversjon using the uploaded file
            var newDokument = new Dokument(dokumenttype, "Tilbud (Smith, John, Godkjent)",
                                           TilknyttetRegistreringSom.HOVEDDOKUMENT);
            var newDokumentversjon = new Dokumentversjon(Variantformat.PRODUKSJONSFORMAT, ".pdf", dokumentfil);

            savedObjects = client.Transaction()
                           .Save(newDokument)
                           .Link(newDokument.LinkRegistrering(journalPost))
                           .Save(newDokumentversjon)
                           .Link(newDokumentversjon.LinkDokument(newDokument))
                           .Commit()
                           .Saved;

            var dokumentversjon = savedObjects[newDokumentversjon.Id] as Dokumentversjon;

            Console.WriteLine(
                $"Created Dokumentversjon: Id={dokumentversjon.Id}, Versjonsnummer: {dokumentversjon.Versjonsnummer}, Filstoerrelse: {dokumentversjon.Filstoerrelse}");

            //Download the Dokumentversjon file
            var downloadPath = Path.GetTempFileName();

            using (var outputStream = File.Create(downloadPath))
            {
                client.Download(dokumentversjon.Dokumentfil, outputStream);
            }
            Console.WriteLine($"Downloaded file {downloadPath}");

            //Find all dokument objects in a Saksmappe called "Tilbud (Smith, John)"
            //Results should be ordered by creation date in descending order
            var queryResponse = client.Query <Dokument>("refRegistrering.refMappe.tittel=@saksmappeTittel", 50)
                                .AddQueryParam("@saksmappeTittel", "Tilbud (Smith, John)")
                                .AddSortOrder("opprettetDato", Order.Descending)
                                .Execute();

            Console.WriteLine(
                $"Query returned {queryResponse.Results.Count()} Dokument objects in Saksmappe objects called 'Tilbud (Smith, John)'");
            Console.WriteLine($"More results available: {queryResponse.HasMore}");

            //Delete the DokumentVersjon by id
            client.Transaction().Delete <Dokumentversjon>(dokumentversjon.Id).Commit();
            Console.WriteLine($"Deleted Dokumentversjon with Id {dokumentversjon.Id}");
            Console.WriteLine();
        }