Category: Microsoft
Category Archives: Microsoft
Several Issues with Microsoft Bookings – Need Assistance
Hello everyone,
I’m new to Microsoft Bookings and encountering a few issues I hope the community can help me resolve.
1. Error on Booking Page:
No matter which access setting I choose (Available to anyone, No self-service, Available to people in your org), I keep receiving an error message on the booking page: “We aren’t offering services through the booking page right now. Please contact us directly or check back here later.” I’ve attached an image of the error below.
2. Viewing Staff Calendars on a Weekly/Monthly Basis:
Currently, I can sort the calendar by “day by staff,” which works well. However, I’m looking to view staff availability on a weekly or monthly basis. Is there a feature that allows this, or is it not possible within Bookings?
3. Address Field Not Showing Full Details in Outlook:
When creating an appointment, there’s a field for a Google address that is searchable and appears complete on Bookings. But, when I check the appointment notes in Outlook, it only shows the street address, not the full details. I will upload an image for clarity.
4. Rescheduling Appointments in Outlook:
We schedule appointments for our sales team, and these appointments sync with their Outlook calendars, which is fantastic. However, they are unable to drag and reschedule these appointments themselves. Must they access Bookings to change their schedules, or is there another way?
I appreciate any guidance or solutions you might offer!
Thank you!
Hello everyone,I’m new to Microsoft Bookings and encountering a few issues I hope the community can help me resolve.1. Error on Booking Page:No matter which access setting I choose (Available to anyone, No self-service, Available to people in your org), I keep receiving an error message on the booking page: “We aren’t offering services through the booking page right now. Please contact us directly or check back here later.” I’ve attached an image of the error below.2. Viewing Staff Calendars on a Weekly/Monthly Basis:Currently, I can sort the calendar by “day by staff,” which works well. However, I’m looking to view staff availability on a weekly or monthly basis. Is there a feature that allows this, or is it not possible within Bookings?3. Address Field Not Showing Full Details in Outlook:When creating an appointment, there’s a field for a Google address that is searchable and appears complete on Bookings. But, when I check the appointment notes in Outlook, it only shows the street address, not the full details. I will upload an image for clarity.4. Rescheduling Appointments in Outlook:We schedule appointments for our sales team, and these appointments sync with their Outlook calendars, which is fantastic. However, they are unable to drag and reschedule these appointments themselves. Must they access Bookings to change their schedules, or is there another way?I appreciate any guidance or solutions you might offer!Thank you! Read More
Data is Null. The method or property cannot be call on null values. Exception
In my application multiple users request the API and in the API I am calling the stored Procedure via Entity Framework but some times getting exception Data Is Null. The Method or Property cannot be call on null values. This is not consistent if 4-5 users are clicking on submit button to call api then api executing stored procedure then for some users exception coming.
This is my main procedure
ALTER PROCEDURE [dbo].[sp_SaveDcumentAndParties](
@Action VARCHAR(20),
@partiesHistoryJson NVARCHAR(MAX)=NULL,
@exportExtraHistoryJson NVARCHAR(MAX)=NULL,
@FieldSettingsJson NVARCHAR(MAX)=NULL,
@CodingSessionDetails NVARCHAR(MAX)=NULL,
@DocumentID VARCHAR(50) = NULL,
@ProjectId VARCHAR(50) = NULL,
@DocumentDate NVARCHAR(255) = NULL,
@DocumentType NVARCHAR(255) = NULL,
@EnteredById INT = NULL,
@Estimated NVARCHAR(255) = NULL,
@Title NVARCHAR(4000) = NULL,
@CodingQATime INT = NULL,
@IsCorrected INT = NULL,
@UserTask VARCHAR(10) = NULL,
@isHistoryDocument Bit,
@ReturnJSONResult NVARCHAR(MAX) =NULL
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ErrorMessage NVARCHAR(1000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
Declare @Description NVARCHAR(MAX);
IF @Action = ‘Save’
BEGIN
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
BEGIN TRY
— Deadlock avoidance mechanism
SET DEADLOCK_PRIORITY LOW;
DECLARE @IsAddPartiesAndPartiesHistory BIT;
DECLARE @IsAddCodedData BIT;
DECLARE @IsUpdateImportPages BIT;
DECLARE @IsUpdateAdminRegeTitle BIT;
DECLARE @IsUpdateExportExtras BIT;
DECLARE @IsInsUpdFieldAdminValidations BIT;
DECLARE @IsExecCodingSessionDetails BIT;
SAVE TRANSACTION MySavepoint; — Savepoint before inner procedure call
EXEC AddPartiesAndPartiesHistory @partiesHistoryJson,@exportExtraHistoryJson,
@DocumentID,@IsReturn=@IsAddPartiesAndPartiesHistory OUTPUT;
EXEC AddCodedData @DocumentID,@ProjectId, @DocumentDate,@DocumentType,@EnteredById,
@Estimated,@Title,@CodingQATime,@IsCorrected,@UserTask,@IsReturn=@IsAddCodedData
OUTPUT;
EXEC UpdateImportPages @DocumentID,@DocumentType,
@EnteredById,@UserTask,@IsReturn=@IsUpdateImportPages OUTPUT;
EXEC UpdateAdminRegeTitle @DocumentID,@DocumentType,
@EnteredById,@Title,@DocumentDate,@Estimated,@UserTask,@IsReturn=@IsUpdateAdminRegeTitle
OUTPUT;
If @UserTask=‘Coder’
Begin
EXEC UpdateExportExtras @DocumentID,@IsReturn=@IsUpdateExportExtras OUTPUT;
EXEC InsUpdFieldAdminValidations
@DocumentID,@FieldSettingsJson,@IsReturn=@IsInsUpdFieldAdminValidations OUTPUT;
END;
DECLARE @DocOrgID INT = (SELECT Id + 1 FROM ImportPages Where
Document_ID=@DocumentID);
DECLARE @NextDocumentId NVARCHAR(100);
DECLARE @NextId INT = 0;
DECLARE @IsReturnFlag BIT = 0;
DECLARE @CodeCompletedCount INT = 0;
DECLARE @QaCompletedCount INT = 0;
DECLARE @TotalDocCount INT = 0;
If @UserTask=‘QA’
BEGIN
EXEC ExecCodingSessionDetails
@DocumentID,@CodingSessionDetails,@IsReturn=@IsExecCodingSessionDetails OUTPUT;
— Retrieve total document count
SELECT @TotalDocCount = COUNT(Id) FROM ImportPages;
SET @Description=‘Total Document – ‘+@TotalDocCount;
— Retrieve QA completed document count
SELECT @QaCompletedCount = COUNT(Id) FROM ImportPages WHERE Coded = 1 AND
Revision = 1;
SET @Description=CONCAT(@Description,‘ / Total QA Doc ompleted –
‘+@QaCompletedCount);
END
ELSE
BEGIN
— Retrieve total document count and code completed document count
SELECT @TotalDocCount = COUNT(Id), @CodeCompletedCount = SUM(CASE WHEN Coded = 1
THEN 1 ELSE 0 END)
FROM ImportPages;
SET @Description=CONCAT(@Description,‘ / Total Coded Doc ompleted –
‘+@CodeCompletedCount);
END
DECLARE @LstDocumentId NVARCHAR(255);
DECLARE @LstId INT;
— Get the document by its ID
SELECT @LstDocumentId = Document_ID,@LstId=Id
FROM ImportPages
WHERE Id = @DocOrgId;
SET @Description=CONCAT(@Description,‘ / 1-Last Doc ID – ‘+@LstDocumentId+‘, ‘+‘Last
Id – ‘+@LstId);
IF @LstDocumentId IS NULL
BEGIN
— If document does not exist, check for the last document
SELECT @IsReturnFlag =
CASE
WHEN @UserTask = ‘Coder’ AND @TotalDocCount = @CodeCompletedCount THEN 1
WHEN @UserTask = ‘QA’ AND @TotalDocCount = @QaCompletedCount THEN 1
ELSE 0
END;
SET @Description=CONCAT(@Description,‘ / Is Return Flag – ‘+CAST(@IsReturnFlag AS
nvarchar(10)));
END
ELSE
BEGIN
IF @isHistoryDocument=0
BEGIN
/*Get Next Available Document*/
DECLARE @IsAssignedSameDoc BIT;
— Check if the document is assigned
SELECT @IsAssignedSameDoc = CASE WHEN EXISTS (SELECT 1 FROM CheckDocuments
WHERE Document_ID = @DocumentId) THEN 1 ELSE 0 END;
IF @IsAssignedSameDoc = 0
BEGIN
— If not assigned, set next document ID and ID to the current document
SET @NextDocumentId = @LstDocumentId;
SET @NextId = @LstId;
SET @Description=CONCAT(@Description,‘ / IsAssignedSameDoc – ‘+
Cast(@IsAssignedSameDoc AS NVARCHAR(10))+‘, NextDocumentId’+@NextDocumentId+‘,
NextId’+@NextId);
END
ELSE
BEGIN
— If assigned, find the next available document
DECLARE @AvailableDocumentId NVARCHAR(100);
DECLARE @AvailableId INT;
— Get the list of documents assigned to the same task
WITH AssignedDocs AS (
SELECT Document_ID
FROM CheckDocuments
WHERE UserTask = @UserTask
)
SELECT TOP 1 @AvailableDocumentId = Document_ID,@AvailableId=Id
FROM ImportPages
WHERE Document_ID NOT IN (SELECT Document_ID FROM AssignedDocs)
ORDER BY Document_ID;
IF @AvailableDocumentId IS NOT NULL
BEGIN
— If available document found, set its ID as next document ID
SET @NextDocumentId = @AvailableDocumentId;
SET @NextId = @AvailableId;
SET @Description=CONCAT(@Description,‘ / @AvailableDocumentId –
‘+ @AvailableDocumentId+‘, NextDocumentId’+@NextDocumentId+‘, NextId’+@NextId);
END
ELSE
BEGIN
— If not assigned, set next document ID and ID to the current
document
SET @NextDocumentId = @LstDocumentId;
SET @NextId = @LstId;
SET @Description=CONCAT(@Description,‘ / ELSE –
NextDocumentId’+@NextDocumentId+‘, NextId’+@NextId);
END
END
/*Remove Document from CheckDocument Table*/
— Check if the document exists in CheckDocuments table
IF EXISTS (
SELECT 1
FROM CheckDocuments
WHERE Document_ID = @DocumentID
AND ProjectId = @ProjectId
AND UserTask = @UserTask
AND DocumentStatus = 0
)
BEGIN
— Remove the document from CheckDocuments table
DELETE FROM CheckDocuments
WHERE Document_ID = @DocumentID
AND ProjectId = @ProjectId
AND UserTask = @UserTask
AND DocumentStatus = 0;
SET @Description=CONCAT(@Description,‘Removed Document from check
table’);
— Output informational message
PRINT ‘Removed Document from check table: ‘ + @DocumentID;
— Output informational message
PRINT ‘Check Table Data Removed: ‘ + @DocumentID;
END
END
ELSE
BEGIN
SET @NextDocumentId = @LstDocumentId;
SET @NextId = @LstId;
SET @Description=CONCAT(@Description,‘ / Outer ELSE –
NextDocumentId’+@NextDocumentId+‘, NextId’+@NextId);
END
END
PRINT ‘@nextId – ‘+ Cast(@nextId As VARCHAR(50));
SET @Description=CONCAT(@Description,‘ / Next button success’);
EXEC [dbo].[InsertSaveDocAndpartiesLogs] @DocumentID,@Description,0;
SET @ReturnJSONResult =
CASE
WHEN @isReturnFlag = 1 THEN N‘{“Response”: “LastDocument”, “Message”: “All
the documents are completed.”}’
WHEN @nextId > 0 THEN N‘{“Response”: “success”, “nextDocumentId”: “‘ +
@nextDocumentId + ‘”, “nextId”: ‘ + CAST(@nextId AS NVARCHAR(10)) + ‘, “Message”: “Document
updated successfully”}’
ELSE N‘{“Response”: “No documents to code”, “Statuscode”: 404}’
END;
— Output informational message
PRINT ‘JsonData: ‘ + @ReturnJSONResult;
SELECT @ReturnJSONResult As JsonResponse;
COMMIT TRANSACTION; PRINT ‘COMMIT’;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
BEGIN
IF @IsAddPartiesAndPartiesHistory = 0 OR @IsAddCodedData=0 OR
@IsUpdateImportPages=0
OR @IsUpdateAdminRegeTitle=0 OR @IsUpdateExportExtras=0 OR @
@IsInsUpdFieldAdminValidations=0
OR @IsExecCodingSessionDetails=0
ROLLBACK TRANSACTION MySavepoint; — Rollback to savepoint
ELSE
ROLLBACK TRANSACTION; — Rollback entire transaction
END
— Get error details
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
SET @Description=CONCAT(@Description,‘ / ‘+@ErrorMessage);
EXEC [dbo].[InsertSaveDocAndpartiesLogs] @DocumentID,@Description,0;
— Set jsonResponse based on error
IF @ErrorMessage = ‘Sequence contains more than one element’
BEGIN
SET @ReturnJSONResult = N‘{“Response”: “Document Saving fail”, “Statuscode”:
500}’;
END
ELSE
BEGIN
IF @ErrorState = 1205
BEGIN
SET @ReturnJSONResult = N‘{“Response”: “1205 – Deadlock Detected”,
“Statuscode”: 500}’;
END
ELSE BEGIN
SET @ReturnJSONResult = N‘{“Response”: “‘ + @ErrorMessage +
‘”,”AddPartiesAndPartiesHistor”:’+CAST(@IsAddPartiesAndPartiesHistory AS NVARCHAR(10))+‘”,
“AddCodedData”:’+CAST(@IsAddCodedData AS
NVARCHAR(10))+‘”,”UpdateImportPages”:’+CAST(@IsUpdateImportPages AS NVARCHAR(10))+‘”,
“UpdateAdminRegeTitle”:’+CAST(@IsUpdateAdminRegeTitle AS
NVARCHAR(10))+‘”,”UpdateExportExtras”:’+CAST(@IsUpdateExportExtras AS NVARCHAR(10))+‘”,
“InsUpdFieldAdminValidations”:’+CAST(@IsInsUpdFieldAdminValidations AS
NVARCHAR(10))+‘”,
“ExecCodingSessionDetails”:’+CAST(@IsExecCodingSessionDetails AS
NVARCHAR(10))+‘”,”Statuscode”: 500}’; END;
END
SELECT @ReturnJSONResult As JsonResponse;
RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState);
END CATCH;
END;
END;
Rest are nested procedures
ALTER PROCEDURE [dbo].[AddCodedData]
(
@DocumentID VARCHAR(50) = NULL,
@ProjectId VARCHAR(50) = NULL,
@DocumentDate NVARCHAR(255) = NULL,
@DocumentType NVARCHAR(255) = NULL,
@EnteredById INT = NULL,
@Estimated NVARCHAR(255) = NULL,
@Title NVARCHAR(4000) = NULL,
@CodingQATime INT = NULL,
@IsCorrected INT = NULL,
@UserTask VARCHAR(10) = NULL,
@IsReturn BIT OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ErrorMessage NVARCHAR(1000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
Declare @Description NVARCHAR(MAX);
BEGIN TRANSACTION;
BEGIN TRY
SET @IsReturn=0;
DECLARE @TempCodedDatas AS TABLE (
[Document_ID] NVARCHAR(255), [Image_File_Name] NVARCHAR(500),
[page_label] NVARCHAR(255), [page_num] INT, [num_pages] INT,
[Coded] INT, [Revision] INT, [DocType] NVARCHAR(255),
[EnteredBy] INT, [HostDocId] NVARCHAR(255),
[ExportDate] DATETIME, [ImportDate] DATETIME, [Percentage]
INT, [SetId] INT, [DateCreated] DATETIME,
LastModified DATETIME, Host_Reference NVARCHAR(255),
[Document_Date] DATETIME, [Estimated] NVARCHAR(255),
[Document_Type] NVARCHAR(255),Title NVARCHAR(4000),
Document_DateValue NVARCHAR(255),
[CodingDate] DATETIME, [CodingTime] INT,[QADate] DATETIME,
[QATime] INT, [IsCorrected] INT
);
INSERT inTO @TempCodedDatas ([Document_ID],
[Image_File_Name], [page_label], [page_num], [num_pages], [Coded], [Revision], [DocType],
[EnteredBy], [HostDocId],
[ExportDate], [ImportDate], [Percentage], [SetId],
[DateCreated], [LastModified], [Host_Reference], [Document_Date], [Estimated],
[Document_Type],
[Title], [Document_DateValue], [CodingDate],[QADate],
[CodingTime],[QATime], [IsCorrected])
SELECT IPS.[Document_ID],IPS.[Image_File_Name],IPS.
[page_label],IPS.[page_num],IPS.[num_pages],1 AS [Coded],
(CASE WHEN @UserTask=‘Coder’ THEN 0 ELSE 1 END) AS
[Revision],@DocumentType AS [DocType],@EnteredById AS [EnteredBy],
IPS.[HostDocId],IPS.[ExportDate],IPS.[ImportDate],IPS.
[Percentage],IPS.[SetId],IPS.[DateCreated],GETDATE() AS [LastModified],
ICD.[Host_Reference],
CASE
WHEN ISNULL(@DocumentDate, ”) = ” THEN NULL
ELSE CONVERT(DATETIME, @DocumentDate)
END AS [DocDate],
@Estimated AS [Estimated],
@DocumentType AS [Document_Type],
CASE
WHEN LEN(@Title) > 0 THEN @Title
ELSE ‘Untitled’
END AS [Title],
CASE
WHEN ISNULL(ICD.Document_DateValue, ”) = ” THEN
NULL
ELSE CONVERT(DATETIME, ICD.Document_DateValue)
END AS [Document_DateValue],
(CASE WHEN @UserTask=‘Coder’ THEN GETDATE() ELSE NULL
END) AS [CodingDate],
(CASE WHEN @UserTask=‘Coder’ THEN NULL ELSE GETDATE()
END) AS [QADate],
(CASE WHEN @UserTask=‘Coder’ THEN @CodingQATime ELSE 0
END) AS [CodingTime],
(CASE WHEN @UserTask=‘Coder’ THEN 0 ELSE @CodingQATime
END) AS [CodingTime],
@IsCorrected AS [IsCorrected]
FROM
ImportPages IPS
INNER JOIN
ImportCodedDatas ICD ON ICD.Document_ID =
IPS.Document_ID
WHERE
IPS.Document_ID = @DocumentID
IF @UserTask = ‘Coder’
BEGIN
INSERT INTO CodedDatas ([Document_ID], [Image_File_Name],
[page_label], [page_num], [num_pages], [Coded], [Revision],
[DocType], [EnteredBy], [HostDocId],[ExportDate],
[ImportDate], [Percentage], [SetId], [DateCreated], [LastModified],
[main_id],[End_Page],[No_Pages],[Host_Reference],
[Document_Date], [Estimated], [Document_Type], [Title],
[Document_DateValue], [CodingDate], [QADate],
[CodingTime], [QATime], [IsCorrected],[CodingStatus],[QAStatus])
SELECT [Document_ID], [Image_File_Name], [page_label],
[page_num], [num_pages],[Coded], [Revision], [DocType], [EnteredBy], [HostDocId],
[ExportDate], [ImportDate], [Percentage], [SetId],
[DateCreated], [LastModified],NULL,NULL,0, Host_Reference,
[Document_Date], [Estimated], [DocType],Title,
[Document_DateValue],[CodingDate], [QADate], [CodingTime], [QATime],
[IsCorrected],NULL,NULL
FROM @TempCodedDatas
SET @Description=‘Coded Data Saved’;
END
ELSE
BEGIN
INSERT INTO CodedDatas ([Document_ID], [Image_File_Name],
[page_label], [page_num], [num_pages], [Coded], [Revision],
[DocType], [EnteredBy], [HostDocId],[ExportDate],
[ImportDate], [Percentage], [SetId], [DateCreated], [LastModified],
[main_id],[End_Page],[No_Pages],[Host_Reference],
[Document_Date], [Estimated], [Document_Type], [Title],
[Document_DateValue], [CodingDate], [QADate],
[CodingTime], [QATime], [IsCorrected],[CodingStatus],[QAStatus])
SELECT [Document_ID], [Image_File_Name], [page_label],
[page_num], [num_pages],[Coded], [Revision], [DocType], [EnteredBy], [HostDocId],
[ExportDate], [ImportDate], [Percentage], [SetId],
[DateCreated], [LastModified],NULL,NULL,0, Host_Reference,
[Document_Date], [Estimated], [DocType],Title,
[Document_DateValue],[CodingDate], [QADate], [CodingTime], [QATime],
[IsCorrected],NULL,NULL
FROM @TempCodedDatas
SET @Description=‘Review data Saved’;
END;
EXEC [dbo].[InsertSaveDocAndpartiesLogs]
@DocumentID,@Description,1;
COMMIT TRANSACTION;
SET @IsReturn=1;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
— Get error details
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
SET @Description=@ErrorMessage;
EXEC [dbo].[InsertSaveDocAndpartiesLogs]
@DocumentID,@Description,0;
SET @IsReturn=0;
END CATCH;
END
ALTER PROCEDURE [dbo].[UpdateAdminRegeTitle]
(
@DocumentID VARCHAR(50) = NULL,
@DocumentType NVARCHAR(255) = NULL,
@EnteredById INT = NULL,
@Title NVARCHAR(4000) = NULL,
@DocumentDate NVARCHAR(255) = NULL,
@Estimated NVARCHAR(255) = NULL,
@UserTask VARCHAR(10) = NULL,
@IsReturn BIT OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ErrorMessage NVARCHAR(1000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
Declare @Description NVARCHAR(MAX);
BEGIN TRANSACTION;
BEGIN TRY
SET @IsReturn=0;
/*Update Admin Regex*/
DECLARE @AdminRegexCount INT;
DECLARE @CodedDataCount INT;
— Get the count of enabled admin regexes
SELECT @AdminRegexCount = COUNT(Id)
FROM AdminRegexs
WHERE Enabled = 1;
— Get the latest coded data for the document
SELECT @CodedDataCount = COUNT(Id)
FROM CodedDatas –WITH (UPDLOCK, SERIALIZABLE)
WHERE Document_ID = @DocumentID;
— Fetch the latest coded data
DECLARE @LatestCodedData TABLE (
Id INT,
Title NVARCHAR(MAX)
);
INSERT INTO @LatestCodedData (Id, Title)
SELECT TOP 1 Id, Title
FROM CodedDatas –WITH (UPDLOCK, SERIALIZABLE)
WHERE Document_ID = @DocumentID
ORDER BY LastModified DESC;
Declare @CodedDataTitle NVarchar(255)
Set @CodedDataTitle=(SELECT Title FROM
@LatestCodedData)
— Apply common updates conditionally
IF (@CodedDataTitle) != ‘Untitled’
BEGIN
UPDATE ImportCodedDatas
SET Document_Date = @DocumentDate,
Estimated = @Estimated,
Document_Type = @DocumentType
WHERE Document_ID = @DocumentID;
END;
DECLARE @TitleString NVARCHAR(MAX);
DECLARE @Replacement NVARCHAR(MAX);
— Apply title regex replacements
IF @AdminRegexCount > 0 AND @CodedDataCount > 0
BEGIN
— Loop through admin regexes
DECLARE @Index INT = 1;
WHILE @Index <= @AdminRegexCount
BEGIN
— Get the current admin regex and
replacement
SELECT @TitleString = Matchexpression,
@Replacement = Replacement
FROM (
SELECT Matchexpression, Replacement,
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum
FROM AdminRegexs
) AS AdminRegex
WHERE RowNum = @Index;
— Update titles based on admin regex
IF @TitleString = ‘(Proprietary
Limited)+/g’
AND NOT EXISTS (SELECT 1 FROM
@LatestCodedData WHERE Title LIKE ‘%(Proprietary Limited)+/g%’)
BEGIN
SET @TitleString =
REPLACE(REPLACE(REPLACE(@TitleString, ‘(‘, ”), ‘)’, ”), ‘+/g’, ”);
END
ELSE
BEGIN
SET @TitleString =
REPLACE(REPLACE(REPLACE(REPLACE(@TitleString, ‘[‘, ”), ‘]’, ”), ‘+/g’, ”), ‘\’, ”);
SET @Title = REPLACE(CASE WHEN
@TitleString LIKE ‘%[,.;:()!?]+/g%’
THEN
REPLACE(CAST(REPLACE(@Title, @TitleString, @Replacement) AS NVARCHAR(MAX)),
‘[‘ + @TitleString +
‘]’, @Replacement) ELSE @Title END, @TitleString, @Replacement);
END
SET @Title = REPLACE(
CASE
WHEN CHARINDEX(@TitleString,
@CodedDataTitle) > 0 THEN
CASE
WHEN @CodedDataTitle
COLLATE SQL_Latin1_General_CP1_CI_AI LIKE ‘%’ + @TitleString + ‘%’ THEN
REPLACE(@CodedDataTitle, @TitleString, @Replacement)
ELSE @CodedDataTitle
END
ELSE @Title
END
, @TitleString, @Replacement);
— Update titles in ImportCodedDatas
table
UPDATE ImportCodedDatas
SET Title = @Title;
— Update titles in CodedDatas table
UPDATE CodedDatas
SET Title = @Title;
— Increment index
SET @Index = @Index + 1;
END;
End;
Else
Begin
DECLARE @NewTitle NVARCHAR(MAX);
SET @NewTitle = REPLACE(LTRIM(RTRIM(@Title)),
‘ ‘, ”); — Remove leading and trailing spaces
UPDATE ImportCodedDatas
SET Title = CASE
WHEN LEN(@NewTitle) > 0 THEN
@Title
ELSE ‘Untitled’
END
WHERE Document_ID = @DocumentID;
End;
COMMIT TRANSACTION;
SET @Description=‘Update Regex Title’;
EXEC [dbo].[InsertSaveDocAndpartiesLogs]
@DocumentID,@Description,1;
SET @IsReturn=1;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
— Get error details
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
SET @Description=@ErrorMessage;
EXEC [dbo].[InsertSaveDocAndpartiesLogs]
@DocumentID,@Description,0;
SET @IsReturn=0;
END CATCH;
END
ALTER PROCEDURE [dbo].[UpdateExportExtras]
(
@DocumentID VARCHAR(50) = NULL,
@IsReturn BIT OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ErrorMessage NVARCHAR(1000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
Declare @Description NVARCHAR(MAX);
BEGIN TRANSACTION;
BEGIN TRY
SET @IsReturn=0;
DECLARE @MatchExpr NVARCHAR(MAX);
DECLARE @Replacement NVARCHAR(MAX);
DECLARE @UpdatedCount INT;
— Get Export_extras matching the Document_ID
SELECT
@MatchExpr = Matchexpression,
@Replacement = Replacement
FROM
AdminRegexs
WHERE
Enabled = 1;
— Update Export_extras for each AdminRegex
IF @MatchExpr IS NOT NULL AND @Replacement IS
NOT NULL
BEGIN
— Update theValue column
UPDATE Export_extras
SET theValue = REPLACE(theValue,
@MatchExpr, @Replacement)
WHERE Document_ID = @DocumentID AND
theValue IS NOT NULL;
SET @UpdatedCount = @@ROWCOUNT;
PRINT CONCAT(‘Updated ‘, @UpdatedCount, ‘
Export_extras (theValue) for AdminRegex: ‘, @MatchExpr, ‘. Document ID: ‘, @DocumentID);
— Update memoValue column
UPDATE Export_extras
SET memoValue = REPLACE(memoValue,
@MatchExpr, @Replacement)
WHERE Document_ID = @DocumentID AND
memoValue IS NOT NULL;
SET @UpdatedCount = @@ROWCOUNT;
SET @Description=‘Updated’+
@UpdatedCount+ ‘ Export_extras (memoValue) for AdminRegex: ‘+ @MatchExpr;
PRINT CONCAT(‘Updated’, @UpdatedCount, ‘
Export_extras (memoValue) for AdminRegex: ‘, @MatchExpr, ‘. Document ID: ‘, @DocumentID);
— Update textValue column
UPDATE Export_extras
SET textValue = REPLACE(textValue,
@MatchExpr, @Replacement)
WHERE Document_ID = @DocumentID AND
textValue IS NOT NULL;
SET @UpdatedCount = @@ROWCOUNT;
SET @Description=‘Updated ‘+
@UpdatedCount+ ‘ Export_extras (textValue) for AdminRegex: ‘+ @MatchExpr ;
PRINT CONCAT(‘Updated ‘, @UpdatedCount, ‘
Export_extras (textValue) for AdminRegex: ‘, @MatchExpr, ‘. Document ID: ‘, @DocumentID);
END;
EXEC [dbo].[InsertSaveDocAndpartiesLogs]
@DocumentID,@Description,1;
COMMIT TRANSACTION;
SET @IsReturn=1;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
— Get error details
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
SET @Description=@ErrorMessage;
EXEC [dbo].[InsertSaveDocAndpartiesLogs]
@DocumentID,@Description,0;
SET @IsReturn=0;
END CATCH;
END
ALTER PROCEDURE [dbo].[UpdateImportPages]
(
@DocumentID VARCHAR(50) = NULL,
@DocumentType NVARCHAR(255) = NULL,
@EnteredById INT = NULL,
@UserTask VARCHAR(10) = NULL,
@IsReturn BIT OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ErrorMessage NVARCHAR(1000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
Declare @Description NVARCHAR(MAX);
BEGIN TRANSACTION;
BEGIN TRY
SET @IsReturn=0;
/*Updating ImportPage*/
IF @UserTask = ‘Coder’
BEGIN
UPDATE ImportPages
SET Coded = 1,
EnteredBy = @EnteredById,
DocType = @DocumentType,
LastModified = GETDATE()
WHERE Document_ID = @DocumentID;
END
ELSE
BEGIN
UPDATE ImportPages
SET Revision = 1,
EnteredBy = @EnteredById,
LastModified = GETDATE()
WHERE Document_ID = @DocumentID;
END;
SET @Description=‘Updated Import Pages’;
EXEC [dbo].[InsertSaveDocAndpartiesLogs]
@DocumentID,@Description,1;
COMMIT TRANSACTION;
SET @IsReturn=1;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
— Get error details
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
SET @Description=@ErrorMessage;
EXEC [dbo].[InsertSaveDocAndpartiesLogs]
@DocumentID,@Description,0;
SET @IsReturn=0;
END CATCH;
END
In my application multiple users request the API and in the API I am calling the stored Procedure via Entity Framework but some times getting exception Data Is Null. The Method or Property cannot be call on null values. This is not consistent if 4-5 users are clicking on submit button to call api then api executing stored procedure then for some users exception coming. This is my main procedure ALTER PROCEDURE [dbo].[sp_SaveDcumentAndParties](
@Action VARCHAR(20),
@partiesHistoryJson NVARCHAR(MAX)=NULL,
@exportExtraHistoryJson NVARCHAR(MAX)=NULL,
@FieldSettingsJson NVARCHAR(MAX)=NULL,
@CodingSessionDetails NVARCHAR(MAX)=NULL,
@DocumentID VARCHAR(50) = NULL,
@ProjectId VARCHAR(50) = NULL,
@DocumentDate NVARCHAR(255) = NULL,
@DocumentType NVARCHAR(255) = NULL,
@EnteredById INT = NULL,
@Estimated NVARCHAR(255) = NULL,
@Title NVARCHAR(4000) = NULL,
@CodingQATime INT = NULL,
@IsCorrected INT = NULL,
@UserTask VARCHAR(10) = NULL,
@isHistoryDocument Bit,
@ReturnJSONResult NVARCHAR(MAX) =NULL
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ErrorMessage NVARCHAR(1000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
Declare @Description NVARCHAR(MAX);
IF @Action = ‘Save’
BEGIN
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
BEGIN TRY
— Deadlock avoidance mechanism
SET DEADLOCK_PRIORITY LOW;
DECLARE @IsAddPartiesAndPartiesHistory BIT;
DECLARE @IsAddCodedData BIT;
DECLARE @IsUpdateImportPages BIT;
DECLARE @IsUpdateAdminRegeTitle BIT;
DECLARE @IsUpdateExportExtras BIT;
DECLARE @IsInsUpdFieldAdminValidations BIT;
DECLARE @IsExecCodingSessionDetails BIT;
SAVE TRANSACTION MySavepoint; — Savepoint before inner procedure call
EXEC AddPartiesAndPartiesHistory @partiesHistoryJson,@exportExtraHistoryJson,
@DocumentID,@IsReturn=@IsAddPartiesAndPartiesHistory OUTPUT;
EXEC AddCodedData @DocumentID,@ProjectId, @DocumentDate,@DocumentType,@EnteredById,
@Estimated,@Title,@CodingQATime,@IsCorrected,@UserTask,@IsReturn=@IsAddCodedData
OUTPUT;
EXEC UpdateImportPages @DocumentID,@DocumentType,
@EnteredById,@UserTask,@IsReturn=@IsUpdateImportPages OUTPUT;
EXEC UpdateAdminRegeTitle @DocumentID,@DocumentType,
@EnteredById,@Title,@DocumentDate,@Estimated,@UserTask,@IsReturn=@IsUpdateAdminRegeTitle
OUTPUT;
If @UserTask=’Coder’
Begin
EXEC UpdateExportExtras @DocumentID,@IsReturn=@IsUpdateExportExtras OUTPUT;
EXEC InsUpdFieldAdminValidations
@DocumentID,@FieldSettingsJson,@IsReturn=@IsInsUpdFieldAdminValidations OUTPUT;
END;
DECLARE @DocOrgID INT = (SELECT Id + 1 FROM ImportPages Where
Document_ID=@DocumentID);
DECLARE @NextDocumentId NVARCHAR(100);
DECLARE @NextId INT = 0;
DECLARE @IsReturnFlag BIT = 0;
DECLARE @CodeCompletedCount INT = 0;
DECLARE @QaCompletedCount INT = 0;
DECLARE @TotalDocCount INT = 0;
If @UserTask=’QA’
BEGIN
EXEC ExecCodingSessionDetails
@DocumentID,@CodingSessionDetails,@IsReturn=@IsExecCodingSessionDetails OUTPUT;
— Retrieve total document count
SELECT @TotalDocCount = COUNT(Id) FROM ImportPages;
SET @Description=’Total Document – ‘+@TotalDocCount;
— Retrieve QA completed document count
SELECT @QaCompletedCount = COUNT(Id) FROM ImportPages WHERE Coded = 1 AND
Revision = 1;
SET @Description=CONCAT(@Description,’ / Total QA Doc ompleted –
‘+@QaCompletedCount);
END
ELSE
BEGIN
— Retrieve total document count and code completed document count
SELECT @TotalDocCount = COUNT(Id), @CodeCompletedCount = SUM(CASE WHEN Coded = 1
THEN 1 ELSE 0 END)
FROM ImportPages;
SET @Description=CONCAT(@Description,’ / Total Coded Doc ompleted –
‘+@CodeCompletedCount);
END
DECLARE @LstDocumentId NVARCHAR(255);
DECLARE @LstId INT;
— Get the document by its ID
SELECT @LstDocumentId = Document_ID,@LstId=Id
FROM ImportPages
WHERE Id = @DocOrgId;
SET @Description=CONCAT(@Description,’ / 1-Last Doc ID – ‘+@LstDocumentId+’, ‘+’Last
Id – ‘+@LstId);
IF @LstDocumentId IS NULL
BEGIN
— If document does not exist, check for the last document
SELECT @IsReturnFlag =
CASE
WHEN @UserTask = ‘Coder’ AND @TotalDocCount = @CodeCompletedCount THEN 1
WHEN @UserTask = ‘QA’ AND @TotalDocCount = @QaCompletedCount THEN 1
ELSE 0
END;
SET @Description=CONCAT(@Description,’ / Is Return Flag – ‘+CAST(@IsReturnFlag AS
nvarchar(10)));
END
ELSE
BEGIN
IF @isHistoryDocument=0
BEGIN
/*Get Next Available Document*/
DECLARE @IsAssignedSameDoc BIT;
— Check if the document is assigned
SELECT @IsAssignedSameDoc = CASE WHEN EXISTS (SELECT 1 FROM CheckDocuments
WHERE Document_ID = @DocumentId) THEN 1 ELSE 0 END;
IF @IsAssignedSameDoc = 0
BEGIN
— If not assigned, set next document ID and ID to the current document
SET @NextDocumentId = @LstDocumentId;
SET @NextId = @LstId;
SET @Description=CONCAT(@Description,’ / IsAssignedSameDoc – ‘+
Cast(@IsAssignedSameDoc AS NVARCHAR(10))+’, NextDocumentId’+@NextDocumentId+’,
NextId’+@NextId);
END
ELSE
BEGIN
— If assigned, find the next available document
DECLARE @AvailableDocumentId NVARCHAR(100);
DECLARE @AvailableId INT;
— Get the list of documents assigned to the same task
WITH AssignedDocs AS (
SELECT Document_ID
FROM CheckDocuments
WHERE UserTask = @UserTask
)
SELECT TOP 1 @AvailableDocumentId = Document_ID,@AvailableId=Id
FROM ImportPages
WHERE Document_ID NOT IN (SELECT Document_ID FROM AssignedDocs)
ORDER BY Document_ID;
IF @AvailableDocumentId IS NOT NULL
BEGIN
— If available document found, set its ID as next document ID
SET @NextDocumentId = @AvailableDocumentId;
SET @NextId = @AvailableId;
SET @Description=CONCAT(@Description,’ / @AvailableDocumentId –
‘+ @AvailableDocumentId+’, NextDocumentId’+@NextDocumentId+’, NextId’+@NextId);
END
ELSE
BEGIN
— If not assigned, set next document ID and ID to the current
document
SET @NextDocumentId = @LstDocumentId;
SET @NextId = @LstId;
SET @Description=CONCAT(@Description,’ / ELSE –
NextDocumentId’+@NextDocumentId+’, NextId’+@NextId);
END
END
/*Remove Document from CheckDocument Table*/
— Check if the document exists in CheckDocuments table
IF EXISTS (
SELECT 1
FROM CheckDocuments
WHERE Document_ID = @DocumentID
AND ProjectId = @ProjectId
AND UserTask = @UserTask
AND DocumentStatus = 0
)
BEGIN
— Remove the document from CheckDocuments table
DELETE FROM CheckDocuments
WHERE Document_ID = @DocumentID
AND ProjectId = @ProjectId
AND UserTask = @UserTask
AND DocumentStatus = 0;
SET @Description=CONCAT(@Description,’Removed Document from check
table’);
— Output informational message
PRINT ‘Removed Document from check table: ‘ + @DocumentID;
— Output informational message
PRINT ‘Check Table Data Removed: ‘ + @DocumentID;
END
END
ELSE
BEGIN
SET @NextDocumentId = @LstDocumentId;
SET @NextId = @LstId;
SET @Description=CONCAT(@Description,’ / Outer ELSE –
NextDocumentId’+@NextDocumentId+’, NextId’+@NextId);
END
END
PRINT ‘@nextId – ‘+ Cast(@nextId As VARCHAR(50));
SET @Description=CONCAT(@Description,’ / Next button success’);
EXEC [dbo].[InsertSaveDocAndpartiesLogs] @DocumentID,@Description,0;
SET @ReturnJSONResult =
CASE
WHEN @isReturnFlag = 1 THEN N'{“Response”: “LastDocument”, “Message”: “All
the documents are completed.”}’
WHEN @nextId > 0 THEN N'{“Response”: “success”, “nextDocumentId”: “‘ +
@nextDocumentId + ‘”, “nextId”: ‘ + CAST(@nextId AS NVARCHAR(10)) + ‘, “Message”: “Document
updated successfully”}’
ELSE N'{“Response”: “No documents to code”, “Statuscode”: 404}’
END;
— Output informational message
PRINT ‘JsonData: ‘ + @ReturnJSONResult;
SELECT @ReturnJSONResult As JsonResponse;
COMMIT TRANSACTION; PRINT ‘COMMIT’;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
BEGIN
IF @IsAddPartiesAndPartiesHistory = 0 OR @IsAddCodedData=0 OR
@IsUpdateImportPages=0
OR @IsUpdateAdminRegeTitle=0 OR @IsUpdateExportExtras=0 OR @
@IsInsUpdFieldAdminValidations=0
OR @IsExecCodingSessionDetails=0
ROLLBACK TRANSACTION MySavepoint; — Rollback to savepoint
ELSE
ROLLBACK TRANSACTION; — Rollback entire transaction
END
— Get error details
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
SET @Description=CONCAT(@Description,’ / ‘+@ErrorMessage);
EXEC [dbo].[InsertSaveDocAndpartiesLogs] @DocumentID,@Description,0;
— Set jsonResponse based on error
IF @ErrorMessage = ‘Sequence contains more than one element’
BEGIN
SET @ReturnJSONResult = N'{“Response”: “Document Saving fail”, “Statuscode”:
500}’;
END
ELSE
BEGIN
IF @ErrorState = 1205
BEGIN
SET @ReturnJSONResult = N'{“Response”: “1205 – Deadlock Detected”,
“Statuscode”: 500}’;
END
ELSE BEGIN
SET @ReturnJSONResult = N'{“Response”: “‘ + @ErrorMessage +
‘”,”AddPartiesAndPartiesHistor”:’+CAST(@IsAddPartiesAndPartiesHistory AS NVARCHAR(10))+'”,
“AddCodedData”:’+CAST(@IsAddCodedData AS
NVARCHAR(10))+'”,”UpdateImportPages”:’+CAST(@IsUpdateImportPages AS NVARCHAR(10))+'”,
“UpdateAdminRegeTitle”:’+CAST(@IsUpdateAdminRegeTitle AS
NVARCHAR(10))+'”,”UpdateExportExtras”:’+CAST(@IsUpdateExportExtras AS NVARCHAR(10))+'”,
“InsUpdFieldAdminValidations”:’+CAST(@IsInsUpdFieldAdminValidations AS
NVARCHAR(10))+'”,
“ExecCodingSessionDetails”:’+CAST(@IsExecCodingSessionDetails AS
NVARCHAR(10))+'”,”Statuscode”: 500}’; END;
END
SELECT @ReturnJSONResult As JsonResponse;
RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState);
END CATCH;
END;
END;Rest are nested procedures ALTER PROCEDURE [dbo].[AddCodedData]
(
@DocumentID VARCHAR(50) = NULL,
@ProjectId VARCHAR(50) = NULL,
@DocumentDate NVARCHAR(255) = NULL,
@DocumentType NVARCHAR(255) = NULL,
@EnteredById INT = NULL,
@Estimated NVARCHAR(255) = NULL,
@Title NVARCHAR(4000) = NULL,
@CodingQATime INT = NULL,
@IsCorrected INT = NULL,
@UserTask VARCHAR(10) = NULL,
@IsReturn BIT OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ErrorMessage NVARCHAR(1000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
Declare @Description NVARCHAR(MAX);
BEGIN TRANSACTION;
BEGIN TRY
SET @IsReturn=0;
DECLARE @TempCodedDatas AS TABLE (
[Document_ID] NVARCHAR(255), [Image_File_Name] NVARCHAR(500),
[page_label] NVARCHAR(255), [page_num] INT, [num_pages] INT,
[Coded] INT, [Revision] INT, [DocType] NVARCHAR(255),
[EnteredBy] INT, [HostDocId] NVARCHAR(255),
[ExportDate] DATETIME, [ImportDate] DATETIME, [Percentage]
INT, [SetId] INT, [DateCreated] DATETIME,
LastModified DATETIME, Host_Reference NVARCHAR(255),
[Document_Date] DATETIME, [Estimated] NVARCHAR(255),
[Document_Type] NVARCHAR(255),Title NVARCHAR(4000),
Document_DateValue NVARCHAR(255),
[CodingDate] DATETIME, [CodingTime] INT,[QADate] DATETIME,
[QATime] INT, [IsCorrected] INT
);
INSERT inTO @TempCodedDatas ([Document_ID],
[Image_File_Name], [page_label], [page_num], [num_pages], [Coded], [Revision], [DocType],
[EnteredBy], [HostDocId],
[ExportDate], [ImportDate], [Percentage], [SetId],
[DateCreated], [LastModified], [Host_Reference], [Document_Date], [Estimated],
[Document_Type],
[Title], [Document_DateValue], [CodingDate],[QADate],
[CodingTime],[QATime], [IsCorrected])
SELECT IPS.[Document_ID],IPS.[Image_File_Name],IPS.
[page_label],IPS.[page_num],IPS.[num_pages],1 AS [Coded],
(CASE WHEN @UserTask=’Coder’ THEN 0 ELSE 1 END) AS
[Revision],@DocumentType AS [DocType],@EnteredById AS [EnteredBy],
IPS.[HostDocId],IPS.[ExportDate],IPS.[ImportDate],IPS.
[Percentage],IPS.[SetId],IPS.[DateCreated],GETDATE() AS [LastModified],
ICD.[Host_Reference],
CASE
WHEN ISNULL(@DocumentDate, ”) = ” THEN NULL
ELSE CONVERT(DATETIME, @DocumentDate)
END AS [DocDate],
@Estimated AS [Estimated],
@DocumentType AS [Document_Type],
CASE
WHEN LEN(@Title) > 0 THEN @Title
ELSE ‘Untitled’
END AS [Title],
CASE
WHEN ISNULL(ICD.Document_DateValue, ”) = ” THEN
NULL
ELSE CONVERT(DATETIME, ICD.Document_DateValue)
END AS [Document_DateValue],
(CASE WHEN @UserTask=’Coder’ THEN GETDATE() ELSE NULL
END) AS [CodingDate],
(CASE WHEN @UserTask=’Coder’ THEN NULL ELSE GETDATE()
END) AS [QADate],
(CASE WHEN @UserTask=’Coder’ THEN @CodingQATime ELSE 0
END) AS [CodingTime],
(CASE WHEN @UserTask=’Coder’ THEN 0 ELSE @CodingQATime
END) AS [CodingTime],
@IsCorrected AS [IsCorrected]
FROM
ImportPages IPS
INNER JOIN
ImportCodedDatas ICD ON ICD.Document_ID =
IPS.Document_ID
WHERE
IPS.Document_ID = @DocumentID
IF @UserTask = ‘Coder’
BEGIN
INSERT INTO CodedDatas ([Document_ID], [Image_File_Name],
[page_label], [page_num], [num_pages], [Coded], [Revision],
[DocType], [EnteredBy], [HostDocId],[ExportDate],
[ImportDate], [Percentage], [SetId], [DateCreated], [LastModified],
[main_id],[End_Page],[No_Pages],[Host_Reference],
[Document_Date], [Estimated], [Document_Type], [Title],
[Document_DateValue], [CodingDate], [QADate],
[CodingTime], [QATime], [IsCorrected],[CodingStatus],[QAStatus])
SELECT [Document_ID], [Image_File_Name], [page_label],
[page_num], [num_pages],[Coded], [Revision], [DocType], [EnteredBy], [HostDocId],
[ExportDate], [ImportDate], [Percentage], [SetId],
[DateCreated], [LastModified],NULL,NULL,0, Host_Reference,
[Document_Date], [Estimated], [DocType],Title,
[Document_DateValue],[CodingDate], [QADate], [CodingTime], [QATime],
[IsCorrected],NULL,NULL
FROM @TempCodedDatas
SET @Description=’Coded Data Saved’;
END
ELSE
BEGIN
INSERT INTO CodedDatas ([Document_ID], [Image_File_Name],
[page_label], [page_num], [num_pages], [Coded], [Revision],
[DocType], [EnteredBy], [HostDocId],[ExportDate],
[ImportDate], [Percentage], [SetId], [DateCreated], [LastModified],
[main_id],[End_Page],[No_Pages],[Host_Reference],
[Document_Date], [Estimated], [Document_Type], [Title],
[Document_DateValue], [CodingDate], [QADate],
[CodingTime], [QATime], [IsCorrected],[CodingStatus],[QAStatus])
SELECT [Document_ID], [Image_File_Name], [page_label],
[page_num], [num_pages],[Coded], [Revision], [DocType], [EnteredBy], [HostDocId],
[ExportDate], [ImportDate], [Percentage], [SetId],
[DateCreated], [LastModified],NULL,NULL,0, Host_Reference,
[Document_Date], [Estimated], [DocType],Title,
[Document_DateValue],[CodingDate], [QADate], [CodingTime], [QATime],
[IsCorrected],NULL,NULL
FROM @TempCodedDatas
SET @Description=’Review data Saved’;
END;
EXEC [dbo].[InsertSaveDocAndpartiesLogs]
@DocumentID,@Description,1;
COMMIT TRANSACTION;
SET @IsReturn=1;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
— Get error details
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
SET @Description=@ErrorMessage;
EXEC [dbo].[InsertSaveDocAndpartiesLogs]
@DocumentID,@Description,0;
SET @IsReturn=0;
END CATCH;
END
ALTER PROCEDURE [dbo].[UpdateAdminRegeTitle]
(
@DocumentID VARCHAR(50) = NULL,
@DocumentType NVARCHAR(255) = NULL,
@EnteredById INT = NULL,
@Title NVARCHAR(4000) = NULL,
@DocumentDate NVARCHAR(255) = NULL,
@Estimated NVARCHAR(255) = NULL,
@UserTask VARCHAR(10) = NULL,
@IsReturn BIT OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ErrorMessage NVARCHAR(1000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
Declare @Description NVARCHAR(MAX);
BEGIN TRANSACTION;
BEGIN TRY
SET @IsReturn=0;
/*Update Admin Regex*/
DECLARE @AdminRegexCount INT;
DECLARE @CodedDataCount INT;
— Get the count of enabled admin regexes
SELECT @AdminRegexCount = COUNT(Id)
FROM AdminRegexs
WHERE Enabled = 1;
— Get the latest coded data for the document
SELECT @CodedDataCount = COUNT(Id)
FROM CodedDatas –WITH (UPDLOCK, SERIALIZABLE)
WHERE Document_ID = @DocumentID;
— Fetch the latest coded data
DECLARE @LatestCodedData TABLE (
Id INT,
Title NVARCHAR(MAX)
);
INSERT INTO @LatestCodedData (Id, Title)
SELECT TOP 1 Id, Title
FROM CodedDatas –WITH (UPDLOCK, SERIALIZABLE)
WHERE Document_ID = @DocumentID
ORDER BY LastModified DESC;
Declare @CodedDataTitle NVarchar(255)
Set @CodedDataTitle=(SELECT Title FROM
@LatestCodedData)
— Apply common updates conditionally
IF (@CodedDataTitle) != ‘Untitled’
BEGIN
UPDATE ImportCodedDatas
SET Document_Date = @DocumentDate,
Estimated = @Estimated,
Document_Type = @DocumentType
WHERE Document_ID = @DocumentID;
END;
DECLARE @TitleString NVARCHAR(MAX);
DECLARE @Replacement NVARCHAR(MAX);
— Apply title regex replacements
IF @AdminRegexCount > 0 AND @CodedDataCount > 0
BEGIN
— Loop through admin regexes
DECLARE @Index INT = 1;
WHILE @Index <= @AdminRegexCount
BEGIN
— Get the current admin regex and
replacement
SELECT @TitleString = Matchexpression,
@Replacement = Replacement
FROM (
SELECT Matchexpression, Replacement,
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum
FROM AdminRegexs
) AS AdminRegex
WHERE RowNum = @Index;
— Update titles based on admin regex
IF @TitleString = ‘(Proprietary
Limited)+/g’
AND NOT EXISTS (SELECT 1 FROM
@LatestCodedData WHERE Title LIKE ‘%(Proprietary Limited)+/g%’)
BEGIN
SET @TitleString =
REPLACE(REPLACE(REPLACE(@TitleString, ‘(‘, ”), ‘)’, ”), ‘+/g’, ”);
END
ELSE
BEGIN
SET @TitleString =
REPLACE(REPLACE(REPLACE(REPLACE(@TitleString, ‘[‘, ”), ‘]’, ”), ‘+/g’, ”), ‘\’, ”);
SET @Title = REPLACE(CASE WHEN
@TitleString LIKE ‘%[,.;:()!?]+/g%’
THEN
REPLACE(CAST(REPLACE(@Title, @TitleString, @Replacement) AS NVARCHAR(MAX)),
‘[‘ + @TitleString +
‘]’, @Replacement) ELSE @Title END, @TitleString, @Replacement);
END
SET @Title = REPLACE(
CASE
WHEN CHARINDEX(@TitleString,
@CodedDataTitle) > 0 THEN
CASE
WHEN @CodedDataTitle
COLLATE SQL_Latin1_General_CP1_CI_AI LIKE ‘%’ + @TitleString + ‘%’ THEN
REPLACE(@CodedDataTitle, @TitleString, @Replacement)
ELSE @CodedDataTitle
END
ELSE @Title
END
, @TitleString, @Replacement);
— Update titles in ImportCodedDatas
table
UPDATE ImportCodedDatas
SET Title = @Title;
— Update titles in CodedDatas table
UPDATE CodedDatas
SET Title = @Title;
— Increment index
SET @Index = @Index + 1;
END;
End;
Else
Begin
DECLARE @NewTitle NVARCHAR(MAX);
SET @NewTitle = REPLACE(LTRIM(RTRIM(@Title)),
‘ ‘, ”); — Remove leading and trailing spaces
UPDATE ImportCodedDatas
SET Title = CASE
WHEN LEN(@NewTitle) > 0 THEN
@Title
ELSE ‘Untitled’
END
WHERE Document_ID = @DocumentID;
End;
COMMIT TRANSACTION;
SET @Description=’Update Regex Title’;
EXEC [dbo].[InsertSaveDocAndpartiesLogs]
@DocumentID,@Description,1;
SET @IsReturn=1;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
— Get error details
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
SET @Description=@ErrorMessage;
EXEC [dbo].[InsertSaveDocAndpartiesLogs]
@DocumentID,@Description,0;
SET @IsReturn=0;
END CATCH;
END
ALTER PROCEDURE [dbo].[UpdateExportExtras]
(
@DocumentID VARCHAR(50) = NULL,
@IsReturn BIT OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ErrorMessage NVARCHAR(1000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
Declare @Description NVARCHAR(MAX);
BEGIN TRANSACTION;
BEGIN TRY
SET @IsReturn=0;
DECLARE @MatchExpr NVARCHAR(MAX);
DECLARE @Replacement NVARCHAR(MAX);
DECLARE @UpdatedCount INT;
— Get Export_extras matching the Document_ID
SELECT
@MatchExpr = Matchexpression,
@Replacement = Replacement
FROM
AdminRegexs
WHERE
Enabled = 1;
— Update Export_extras for each AdminRegex
IF @MatchExpr IS NOT NULL AND @Replacement IS
NOT NULL
BEGIN
— Update theValue column
UPDATE Export_extras
SET theValue = REPLACE(theValue,
@MatchExpr, @Replacement)
WHERE Document_ID = @DocumentID AND
theValue IS NOT NULL;
SET @UpdatedCount = @@ROWCOUNT;
PRINT CONCAT(‘Updated ‘, @UpdatedCount, ‘
Export_extras (theValue) for AdminRegex: ‘, @MatchExpr, ‘. Document ID: ‘, @DocumentID);
— Update memoValue column
UPDATE Export_extras
SET memoValue = REPLACE(memoValue,
@MatchExpr, @Replacement)
WHERE Document_ID = @DocumentID AND
memoValue IS NOT NULL;
SET @UpdatedCount = @@ROWCOUNT;
SET @Description=’Updated’+
@UpdatedCount+ ‘ Export_extras (memoValue) for AdminRegex: ‘+ @MatchExpr;
PRINT CONCAT(‘Updated’, @UpdatedCount, ‘
Export_extras (memoValue) for AdminRegex: ‘, @MatchExpr, ‘. Document ID: ‘, @DocumentID);
— Update textValue column
UPDATE Export_extras
SET textValue = REPLACE(textValue,
@MatchExpr, @Replacement)
WHERE Document_ID = @DocumentID AND
textValue IS NOT NULL;
SET @UpdatedCount = @@ROWCOUNT;
SET @Description=’Updated ‘+
@UpdatedCount+ ‘ Export_extras (textValue) for AdminRegex: ‘+ @MatchExpr ;
PRINT CONCAT(‘Updated ‘, @UpdatedCount, ‘
Export_extras (textValue) for AdminRegex: ‘, @MatchExpr, ‘. Document ID: ‘, @DocumentID);
END;
EXEC [dbo].[InsertSaveDocAndpartiesLogs]
@DocumentID,@Description,1;
COMMIT TRANSACTION;
SET @IsReturn=1;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
— Get error details
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
SET @Description=@ErrorMessage;
EXEC [dbo].[InsertSaveDocAndpartiesLogs]
@DocumentID,@Description,0;
SET @IsReturn=0;
END CATCH;
END
ALTER PROCEDURE [dbo].[UpdateImportPages]
(
@DocumentID VARCHAR(50) = NULL,
@DocumentType NVARCHAR(255) = NULL,
@EnteredById INT = NULL,
@UserTask VARCHAR(10) = NULL,
@IsReturn BIT OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ErrorMessage NVARCHAR(1000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
Declare @Description NVARCHAR(MAX);
BEGIN TRANSACTION;
BEGIN TRY
SET @IsReturn=0;
/*Updating ImportPage*/
IF @UserTask = ‘Coder’
BEGIN
UPDATE ImportPages
SET Coded = 1,
EnteredBy = @EnteredById,
DocType = @DocumentType,
LastModified = GETDATE()
WHERE Document_ID = @DocumentID;
END
ELSE
BEGIN
UPDATE ImportPages
SET Revision = 1,
EnteredBy = @EnteredById,
LastModified = GETDATE()
WHERE Document_ID = @DocumentID;
END;
SET @Description=’Updated Import Pages’;
EXEC [dbo].[InsertSaveDocAndpartiesLogs]
@DocumentID,@Description,1;
COMMIT TRANSACTION;
SET @IsReturn=1;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
— Get error details
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
SET @Description=@ErrorMessage;
EXEC [dbo].[InsertSaveDocAndpartiesLogs]
@DocumentID,@Description,0;
SET @IsReturn=0;
END CATCH;
END Read More
Business Applications Partner News: Week of April 29
Check out this week’s top resources to stay up-to-date on the latest Business Applications Partner News. Remember to sign up for the monthly Dynamics 365 and Power Platform partner pulse newsletters.
What to register for:
THIS WEEK!
April 30 (PDT): Dynamics 365 Supply Chain Management – Demand Planning Workshop
May 2: Supply Chain Premium partner webinar
July 22: Microsoft Partner FY25 GTM Launch Event for Business Applications
What to review/like/share:
Case study: Power Platform influencer MNP Digital helps customers achieve low-code success
Leapwork brings testing efficiencies to Dynamics 365 and Power Platform partners: LinkedIn post | direct blog link
What to watch:
April 18 Tech Talk: Power Apps and SQL
Reminders: Register for the upcoming partner events!
Events:
May 9: SMB Partner Hour
May 16-17: Directions Asia
May 21-23: Microsoft Build
May 30: Copilot Studio Partner Opportunity Webinar
Register for upcoming Microsoft AI Training Roadshows
Trainings:
April 1-May 31: Q4 Microsoft Catalyst Partner Training
FY24 High Volume Acceleration Program (Advanced)
June 11 (IST) (BST): Dynamics 365 Supply Chain Management – Demand Planning Workshop
May 14-16 (PDT) | May 15-17 (IST) (BST): SMB Sales Bootcamp
Check out this week’s top resources to stay up-to-date on the latest Business Applications Partner News. Remember to sign up for the monthly Dynamics 365 and Power Platform partner pulse newsletters.
What to register for:
THIS WEEK!
April 30 (PDT): Dynamics 365 Supply Chain Management – Demand Planning Workshop
May 2: Supply Chain Premium partner webinar
July 22: Microsoft Partner FY25 GTM Launch Event for Business Applications
What to review/like/share:
Case study: Power Platform influencer MNP Digital helps customers achieve low-code success
Leapwork brings testing efficiencies to Dynamics 365 and Power Platform partners: LinkedIn post | direct blog link
What to watch:
April 18 Tech Talk: Power Apps and SQL
Reminders: Register for the upcoming partner events!
Events:
May 9: SMB Partner Hour
May 16-17: Directions Asia
May 21-23: Microsoft Build
May 30: Copilot Studio Partner Opportunity Webinar
Register for upcoming Microsoft AI Training Roadshows
Trainings:
April 1-May 31: Q4 Microsoft Catalyst Partner Training
FY24 High Volume Acceleration Program (Advanced)
June 11 (IST) (BST): Dynamics 365 Supply Chain Management – Demand Planning Workshop
May 14-16 (PDT) | May 15-17 (IST) (BST): SMB Sales Bootcamp Read More
See attached
I am not able to post this, maybe it will post eventually. It keeps asking me to correct highlited errors but cant find any
I am not able to post this, maybe it will post eventually. It keeps asking me to correct highlited errors but cant find any Read More
Removal of Duplicate Task option in ToDo
I have a number of template tasks which include a number of steps in ToDo which I do frequently but not on a regular schedule eg approving someone’s annual leave. I have a list of templates and when I need a new copy I used to duplicate the template task then move the second copy to where I needed it.
In the latest update Microsoft have removed the Duplicate function so I have to manually type the “duplicate” task in again. This is the same in Outlook app and online versions of Outlook and ToDo.
Why are MS taking core functionality away from this app? Do they ever consult users before making changes like this?
Does anyone have a workaround? Please …..
I have a number of template tasks which include a number of steps in ToDo which I do frequently but not on a regular schedule eg approving someone’s annual leave. I have a list of templates and when I need a new copy I used to duplicate the template task then move the second copy to where I needed it. In the latest update Microsoft have removed the Duplicate function so I have to manually type the “duplicate” task in again. This is the same in Outlook app and online versions of Outlook and ToDo.Why are MS taking core functionality away from this app? Do they ever consult users before making changes like this?Does anyone have a workaround? Please ….. Read More
MS Office Outlook rules
I get a lot of spam. most is 1x-3x and then the email domain ‘evaporates.’
but some just continue on for weeks/months/years.
so I set up a “rule” – if sender’s address include (text); permanently delete.
seems the “Rules” function will only accept five
text1 or
text2 or
…
entries.
so I established a second Rule – to add additional permanent delete spammer url.
problem:
there is a check block “and stop processing more rules” – which I uncheck and it auto rechecks.
I initially thought it meant ‘stop processing more rules on-that-message’
but apparently it means ‘stop processing any more rules of any kind’
so what happens is….
“rule #1” encounters an address to permanently delete in my inbox
and does not process “rule #2” – so I’m left with all the spam-to-be-permanently deleted contained in the five spammer url’s of rule #2
how does one tell MS Office Outlook to ‘keep on chugging’ and process all rules listed?
I get a lot of spam. most is 1x-3x and then the email domain ‘evaporates.’but some just continue on for weeks/months/years. so I set up a “rule” – if sender’s address include (text); permanently delete. seems the “Rules” function will only accept fivetext1 ortext2 or…entries. so I established a second Rule – to add additional permanent delete spammer url.problem:there is a check block “and stop processing more rules” – which I uncheck and it auto rechecks.I initially thought it meant ‘stop processing more rules on-that-message’but apparently it means ‘stop processing any more rules of any kind’so what happens is….”rule #1″ encounters an address to permanently delete in my inboxand does not process “rule #2” – so I’m left with all the spam-to-be-permanently deleted contained in the five spammer url’s of rule #2 how does one tell MS Office Outlook to ‘keep on chugging’ and process all rules listed? Read More
Partner Spotlight: Revolutionizing Agriculture Through Digital Innovation and Sustainability
As part of the Microsoft #BuildFor2030 Initiative, which aligns with the United Nations Sustainable Development Goals, we are committed to showcasing solutions that drive meaningful societal impact and spotlighting our partners’ growth stories on the marketplace. In this edition of our Partner Spotlight series, we continue highlighting partners at the forefront of app innovation on the commercial marketplace. Throughout the series, we will be telling the unique stories of partners who are leading the way with AI in app development, who are building using multiple Microsoft products, and who are publishing transactable applications on the marketplace. In this article, Microsoft’s @Gena_Goh at down with AGRIVI’s Matija Zulj to learn more about their story and partner journey.
About Matija: Matija is a founder and CEO at AGRIVI, an AgTech company that delivers digital agriculture solutions across the agrifood value chain, with the vision to change the way food is produced. With a focus on AI, innovation, sustainability, and support for farmers, AGRIVI plays a key role in improving the entire agrifood ecosystem. Matija serves as a European Innovation Council Ambassador, OECD-FAO Advisory Group Member for Responsible Ag Supply Chains, and UN Global Compact Board Member Croatia.
About Gena: Gena Goh is the Partner Advisory & Inclusive Growth Senior Strategy Lead with the Global Partner Solutions business at Microsoft. She focuses on developing strategies that elevate the voice of partner and enable partners to innovate and build solutions toward a more inclusive economy, including leading the Microsoft #BuildFor2030 Initiative. Gena is also a professionally trained co-active coach and enjoys helping people and organizations chart new paths to purpose and impact.
___________________________________________________________________________________________________________________________________
[GG]: Tell us about Agrivi and your mission. What inspired the founding?
[MZ]: AGRIVI was born with a powerful mission – to solve the global food problem by changing the way food is produced. It all began by seeing and witnessing that our current food ecosystem is broken, due to climate change, inefficient supply chains, and unsafe food.
Namely, with the global population projected to reach 10 billion by 2050, urgent changes are needed to ensure a future with healthy, nutritious, and climate-friendly food while securing livelihoods for farmers worldwide. Thus, embracing digital transformation becomes imperative to revolutionize the entire industry.
At AGRIVI, we are dedicated to driving this transformation by focusing on technology, innovation, and sustainability in improving the agrifood sector. Our mission is to empower farmers and agrifood companies with intelligent technology solutions, facilitating economically and environmentally sustainable and traceable food production.
We achieve this by digitalizing farm businesses, enhancing food transparency and safety, promoting regenerative agriculture practices, and offering farmers AI-powered advice and knowledge. We prioritize both digitalizing farming methods and fostering collaboration across the agrifood value chain.
[GG]: Can you tell us a bit about the application(s) you have available on the marketplace? How does it work? [You can also include a hyperlink to the application on the marketplace so that we can link to it in the blog]
[MZ]: Our comprehensive farm management software (FMS) leveraged through Microsoft Azure technology, equips farms worldwide with data-driven tools and real-time insights from the field to make precise agronomic and economic decisions and maximize productivity, profitability and sustainability.
With one centralized platform, farmers can manage their farm and have full control over all processes throughout the season. From creating a crop plan and budget for the season, minimizing risks and crop damage based on insights from the field such as weather conditions, pest alarms, or vegetation indices, monitoring the execution of work in the field, monitoring costs, and ensuring the complete traceability of crop production.
Insights based on data and actual field conditions enable farmers and companies to make informed choices about planting, fertilizing, and protection of crops, irrigation, and other parts of the production cycle. Data-driven farm management increases production efficiency and product quality and reduces resource consumption and food waste caused by quality and safety issues, which overall contributes to the preservation of the environment and the reduction of the negative effects of agriculture on the environment.
[GG]: AI is top of mind for all of us. How is AGRIVI leveraging or planning to leverage AI in app development?
[MZ]: Despite many agtech solutions being available, we are witnessing that technology adoption remained limited mainly to professional farmers and enterprises. Technology in agriculture was not simple and intuitive enough to reach all farmers leaving around 500 million farms still not digitalized.
Recognizing this gap, last year we launched AGRIVI Ed, an Agronomic AI advisor designed to democratize access to technology and revolutionize how farmers access knowledge and make decisions. AGRIVI Ed acts as an expert agronomic advisor available 24/7, supporting over 50 languages and accessible through messaging platforms like WhatsApp and Viber to make it intuitive and seamless for farmers to use, regardless of their technological knowledge.
Thanks to Azure OpenAI service and Copilot that uses Generative AI and different domain AI services we have trained our AI advisor to deliver high quality and extensive agronomic knowledge and drive seamless communication with the end-users. To expand our impact further, we’ve introduced this solution to the market as AGRIVI Engage, a fully managed B2B whitelabeled platform for agrifood companies and the public sector. This collaborative approach is enabling us to accelerate the adoption of technology and drive positive change globally.
Personalized AI Advisor enables companies and organizations to provide farmers with constant access to information, knowledge, and advice. It fosters active collaboration and upskilling farmers toward digital transformation, while helping companies to increase their market share, engage with their customers and drive decarbonization in their supply chains.
[GG]: What Microsoft cloud products did you use in your app development?
[MZ]: We have developed our products with a comprehensive technology stack, including Microsoft Azure Cloud, Microsoft.NET, Azure OpenAI Services, CoPilot and many others.
[GG]: How has Microsoft supported you along your journey?
[MZ]: AGRIVI has participated in Microsoft Founders Hub program and Entrepreneurship for Positive Impact Program. Through these programs, we had access to a substantial set of complimentary Microsoft products, technical support and go-to-market services, and coaching by senior leaders at Microsoft. For a fast-growing company, such support means a lot.
[GG]: Agrivi is a part of Microsoft’s Entrepreneurship for Positive Impact, supporting the UN Sustainable Development Goals (SDGs). How does being a part of this program align with the values and mission of your company?
[MZ]: Our solution is not just in bringing a simple farming app to growers, we aim to develop cutting-edge technology solutions and leverage the power of AI to support farmers be more efficient and profitable, to reduce waste, and to lower barriers to entry for a new generation of farmers.
Doing positive impact requires partnerships, which is why getting the opportunity to participate in Microsoft’s Entrepreneurship for Positive Impact program enabled us with high level support to navigate through our strategic and go-to-market challenges. The knowledge and mentorship, as well as visibility through the program truly helps us to scale our impact to the next level.
[GG]: Can you share examples of your work with customers that has enabled positive business and sustainability outcomes?
[MZ]: We recently launched AI agronomic advisors in collaboration with local municipalities in Croatia, which have decided to adopt this innovative technology recognizing its importance for local agriculture. These local municipalities have introduced their own personalized AI communication platform to farmers across Croatia.
Through the WhatsApp platform, the advisor provides seamless access to high-quality knowledge, information, and advice for farmers. They cover a wide spectrum of agronomic topics, from general agricultural inquiries to pest control, disease prevention, plant nutrition, fertilization, and regenerative practices. Additionally, they facilitate active collaboration between local municipalities and farmers. They give farmers easy access to information about tenders or subsidies and allow them to provide feedback on local policies, making them more involved in strategic plans and community matters.
As local governments worldwide grapple with challenges in maintaining sustainable agricultural production, farmers face disruptions due to climate change, labor shortages, and limited access to knowledge and advice. Supporting farmers to sustain and secure local food production has never been more critical.
That’s why by providing farmers with information and advice and enabling direct engagement with local authorities, the local municipalities, as the main providers of this innovative tool, have the opportunity to receive regular feedback from their local farmers which helps preserve local crop production and encourages sustainability within the community.
[GG]: How do you engage and educate your customers about sustainability, and what are some ways you encourage them to make solution investments that drive sustainability?
[MZ]: After 10 years of business in agtech industry, we are still facing the biggest challenge – changing the habit of making decisions based on intuition towards data-driven and fact-based decision-making. Transformation takes time, and on top of building products that solve real-life problems, it requires education in the industry, new skillsets, new regulatory and legislation systems, collaboration of the entire value chain, patient capital and much more.
That’s why we see our role as a technology provider but also as an educator. We are very active in raising awareness and educating our customers across the entire agrifood value chain about how our solutions help them transform traditional agriculture practices to more data-driven and climate-friendly, and how to leverage data and technology to empower sustainable practices and calculate their contribution to this matter.
Global food production is in a very bad state and there is a need for urgent change. Luckily regulatory requirements for making the food sector more productive and sustainable will soon require companies to change, and our role here is to help them navigate the change and embrace the opportunity that is in front of them.
That’s why we actively participate in global initiatives serving as the UN Global Compact Board member in Croatia, OECD-FAO Advisory Group member for Responsible Agriculture Supply Chains, and ambassadors at EIC. We actively encourage, improve, and advocate for digital transformation of the entire agri-food industry.
[GG]: Have you collaborated with other partners or community organizations in the Microsoft ecosystem? How has this collaboration been beneficial?
[MZ]: We are proud and grateful that we had the opportunity to present AGRIVI’s AI solutions during the World Economic Forum in Davos in collaboration with Microsoft, Schwab Foundation and SAP. Also, we had the opportunity to partner with diverse divisions within Microsoft, including Microsoft Research team that has supported the development of our AI solutions during the Hackathon for positive impact and we have jointly showcased it during the World AgriTech Innovation Summit in San Francisco.
[GG]: What are you most proud of in your journey building/leading Agrivi? What’s next?
[MZ]: For me, everything is about people. The great, passionate team of experts that stand behind AGRIVI is the thing I am most proud of. Their dedication, passion, and tireless efforts are the driving force behind AGRIVI’s success, transforming my vision from 10 years ago into a truly great impact we are making today.
With more experience and expertise from the industry, and thanks to Microsoft’s mentorship, we have been able to accelerate our impact. So, we are remaining committed to pushing the boundaries of innovation and expanding our reach to even more farmers globally. Our vision is to create a future where agriculture is able to feed the entire global population in a productive and sustainable way, and we believe that by harnessing the power of technology, we can make this vision a reality.
Microsoft Tech Community – Latest Blogs –Read More
Demystifying Azure Open AI for App developers
Co-Authors (Prakash, Prabhjot)
The purpose of this blog is to cover the concepts related to Azure Open AI in an easy-to-understand concise format for anyone with no or limited ML background.
Let’s begin by understanding the fundamental components of Azure OpenAI solutions, their tools, and patterns, and explore how they are distinct from Azure OpenAI itself.
Open AI is an independent research organization focused on artificial intelligence (AI) which in addition to research also develops various GPT (Generative pre-trained) models like GPT-4, GPT-4V, DALL-E 3, Whisper. Primary uses case for GPT models natural language processing tasks, language translation, text summarization, and Q&A. These models can be used with Enterprise data and additional domain specific models using various patterns and techniques.
Azure Open AI refers to the collaboration between OpenAI and Microsoft Azure. Under this partnership, OpenAI’s AI models and technologies are hosted by Microsoft in Azure, making them accessible to developers and organizations through the Azure platform. The Azure OpenAI service automatically encrypts any data that persists in the cloud, including training data and fine-tuned models. This encryption helps protect the data and ensures that it meets organizational security and compliance requirements. Although Azure OpenAI is designed to meet data protection, privacy, and security standards, it is the your responsibility to use the technology in compliance with applicable laws and regulations and in a manner that aligns with their specific business needs.
Azure Open AI Benefits
Pricing: Azure OpenAI and OpenAI have different pricing policies.
Regional availability: Azure OpenAI is available in multiple regions.
Tokens: Azure OpenAI limits the number of tokens
Data Safety: Data submitted to the Azure OpenAI Service including prompts (Inputs), completions (Outputs), embeddings and any training data remains within Microsoft Azure Customer Subscription and is not used by Azure OpenAI or passed to OpenAI for model improvements or training / predictions. No data is shared between customers.
Capabilities: Azure OpenAI provides a safe and reliable ecosystem to safeguard your data, while OpenAI provides advanced language AI models like OpenAI GPT or DALL-E.
Data Retention: Microsoft retains only the Abuse monitoring data for 30 days. Customers can request to opt out of the process.
Responsible AI: Azure Open AI goes through an RAI ensemble of AI models to filter Inputs and outputs for Sex, Hate, Violence, Self-Harm. These filters are configurable by customers.
Components of Azure open AI
Azure OpenAI offers a ready-to-use service with finely tuned capabilities, accessible via an API (Model as a Service). The key assets contributing to the Generative AI solution include LLMs, agents, plugins, prompts, chains, and APIs.
Fundamentals of Utilizing Azure OpenAI:
Prompting: The models operate on a prompt-based system. Interaction with the Model/API is conducted through prompts, and crafting an effective prompt is crucial, known as prompt engineering, to enhance relevance and precision.
Grounding: This technique provides the Model with context to yield more pertinent responses. Grounding can be achieved through various methods, such as embedding, to provide the necessary background information.
Chunking: This process divides extensive documents into smaller segments manageable by embedding models, ensuring adherence to maximum token input limits. These segments populate vector stores and facilitate text-to-vector query transformations.
Fine-Tuning: In instances where prompt engineering does not yield accurate responses or domain-specific behavior is required, fine-tuning re-trains the LLM with sample data to optimize it for datasets.
Tokens: Tokenization is the process of breaking text into smaller segments called tokens which can be a word or part of a wordfor few characters. Its usage and size depend on the model you are using.
Prompts in Azure Open AI
We query Azure Open AI using Prompts (fig 1). Prompt has three core components.
System/meta prompt
Question/Query
Sources/Context
Semantic Kernel and LangChain
LangChain and Semantic Kernel have some similarities, but each one has their unique features and use cases.
LangChain
LangChain is modular and supports both Python and JavaScript/TypeScript. It streamlines development by breaking down complex tasks into a sequence of components. LangChain offers a versatile framework for developing applications that involve natural language processing (NLP) tasks. Its modular nature and support for both Python and JavaScript/TypeScript indicate flexibility in development environments. Breaking down complex tasks into manageable components like Model I/O, Retrieval, Chains, Agents, Memory, and Response simplifies the development process and allows for easier debugging and maintenance.
The use of Chains to construct sequences of calls suggests a workflow-oriented approach, where developers can organize tasks into a logical sequence. Agents add another layer of abstraction by enabling chains to choose tools based on high-level directives, potentially increasing adaptability and efficiency.
The inclusion of Memory for persisting application state between runs of a chain indicates support for stateful processing, which can be crucial for certain types of applications where context needs to be maintained across interactions.
Overall, LangChain appears to be a good tool for building applications that involve NLP tasks, offering modularity, flexibility, and support for different programming languages. Its components provide developers with a structured approach to developing complex applications while streamlining the development process.
Sematic Kernel
Semantic Kernel is an open-source SDK (software development kits) that simplifies the process of constructing agents that can activate your existing code. It is a highly adaptable SDK that is compatible with models from OpenAI, Azure OpenAI, Hugging Face, and beyond. By merging your existing C#, Python, and Java code with these models, you can create agents that are proficient in responding to questions and automating tasks.
Empowering Developers with Semantic Kernel:
To assist developers in crafting their own Copilot experiences using AI plugins, we have unveiled Semantic Kernel, a streamlined open-source SDK that orchestrates your existing code (plugins) with AI.
Harness the same AI orchestration techniques that drive Microsoft’s Copilots in your applications.
Beyond Simple Chat Applications: While modern AI models are adept at generating messages and images, constructing fully autonomous AI agents that can automate business operations and enhance user productivity requires more. A framework that can interpret model responses and utilize them to trigger existing code is essential for productive tasks.
Semantic Kernel fulfills this need by providing an SDK that enables you to describe your existing code to AI models, allowing them to request its execution. Semantic Kernel then converts the model’s response into an actionable call to your code.
To summarize, LangChain is a powerful framework that has more out of the box tools and integrations whereas Semantic Kernel is more lightweight. Both frameworks have a wide range of use cases, making them versatile tools for developers. Whether you choose Langchain or Semantic Kernel will depend on the language your team supports and what features and integrations are included out of the box.
Samples: semantic-kernel/dotnet/samples at main · microsoft/semantic-kernel (github.com)
Vector DB
Vectors and Embeddings
Vector representation is to capture the essential characteristics of an item in a numerical format. Embedding is a special type of vector of data representation that LLMs can use.
A vector database is a storage system engineered to house and handle vector embeddings, which are numerical representations of complex data within a multi-dimensional space. Each dimension in this space is associated with a particular attribute of the data, and sophisticated data can be represented using tens of thousands of dimensions. The position of a vector within this space signifies its distinct characteristics. Various types of data, including words, phrases, documents, images, and audio, can be converted into vector form. These embeddings are crucial for functions such as similarity searches, multi-modal searches, recommendation systems, and large language models (LLMs), among others.
In a vector database, embeddings are indexed and queried through vector search algorithms based on their vector distance or similarity.
The following are some of the Vector Databases:
Cosmos DB
AI Search: Azure AI Search stores the data that you query over. Use it as a pure vector store anytime you need long-term memory or a knowledge base, or grounding data for Retrieval Augmented Generation (RAG) architecture, or any app that uses vectors.
PostgreSQL with vector extension
Pinecone
Any open source
Retrieval Augmented Generation (RAG)
Retrieval augmented generation (RAG) is an essential element of utilizing Generative AI, particularly in enterprise contexts. This approach involves acquiring domain-specific knowledge and integrating it with the initial prompt (refer to figure 2) to enhance the precision and relevance of the results produced by Azure Open AI. The ‘Bring Your Own Data’ feature is a unique capability that facilitates the implementation of RAG, and Azure AI studio simplifies its application for straightforward scenarios.
Responsible AI (RAI)
Built in features in Azure Open AI studio: Azure Open AI goes through an RAI ensemble of AI models to filter Inputs and outputs for Sex, Hate, Violence, Self-Harm. These filters are configurable by customers.
RAI Toolbox Github repository
Tools: The tools which can be used to develop Azure Open AI based solutions
AI Studio
CoPilot Studio
Visual Studio
VS Code (Visual Studio Code)
GitHub Copilot
Small Language Model (SLM)
Compact language models, such as Microsoft’s Phi and those from various providers, possess capabilities akin to larger Generative AI models but require significantly fewer resources. They can operate on any Nvidia-based hardware, allowing for the deployment of Small Language Models (SLMs) in diverse settings. SLMs demonstrate considerable proficiency in areas like common sense reasoning, language comprehension, and knowledge. However, they may not match the larger models in terms of world knowledge due to their size constraints.
Azure OpenAI Approved as a Service within the FedRAMP High Authorization for Azure Commercial
Microsoft’s Azure OpenAI service is now included within the US Federal Risk and Authorization Management Program (FedRAMP) High Authorization for Azure Commercial. This Provisional Authorization to Operate (P-ATO) within the existing FedRAMP High Azure Commercial environment was approved by the FedRAMP Joint Authorization Board (JAB). This milestone follows our previously announced solution enabling Azure Government customers to access Azure OpenAI Service in the commercial environment. With this latest update, agencies requiring FedRAMP High can directly access Azure OpenAI from Azure commercial.
Challenges
Challenges faced by early adopters are being addressed through ongoing efforts. Utilizing patterns and approaches such as APIM or AI landing zones can mitigate some issues:
Model Updates: Frequent modifications to the underlying Large Language Models (LLMs) can pose operational challenges.
Multilingual Scenarios: In applications supporting multiple languages, the accuracy of responses may decline, with LLMs potentially delivering mixed-language content.
Performance, HA/DR: Ensuring consistent performance in production applications that use Open AI can be challenging, with possible increased latency.
Secure Sensitive Information: To secure sensitive data, enterprises must work closely with their Office of Responsible AI during the project qualification stage, especially for sensitive AI use cases. Strict adherence to their advice on managing sensitive or explicit content is imperative. Organizations are required to follow established security principles and apply data classification labels, known as sensitivity labels, to protect documents, emails, PDFs, Teams meetings, and chats.
Cost Management: A strategy employed by customers involves using an orchestrator to determine which GPT model to invoke based on the query. Not all queries necessitate GPT-4; many can be adequately addressed with GPT-3.5, thus managing costs effectively.
In conclusion, this article will help to quickly understand the opportunities and the landscape of enabling Azure Open AI in your applications.
References
https://github.com/FreddyAyala/AzureAIServicesLandingZone
Azure/AI-in-a-Box (github.com)
GitHub – Azure/azure-openai-samples: Azure OpenAI Samples is a collection of code samples illustrating how to use Azure Open AI in creating AI solution for various use cases across industries. This repository is mained by a community of volunters. We welcomed your contributions.
Phi-2: The surprising power of small language models – Microsoft Research
semantic-kernel/dotnet/samples at main · microsoft/semantic-kernel (github.com)
Microsoft Tech Community – Latest Blogs –Read More
Partner Success Core Benefits – Windows Server license
Hello,
we are evaluating to move from Action Pack to Partner Success Core Benefits. The only dubt I have is related to Windows Server licenses. On benefits list are reported 8 core license of windows server Standard/Datacenter. As minimum required licenses per server is 16 core, how we can proceed in order to integrate?
Hello,we are evaluating to move from Action Pack to Partner Success Core Benefits. The only dubt I have is related to Windows Server licenses. On benefits list are reported 8 core license of windows server Standard/Datacenter. As minimum required licenses per server is 16 core, how we can proceed in order to integrate? Read More
Multiple Bookings
Hi All,
So I’m looking for the below and wondering if someone could help me please.
I send an invite out to multiple people via Email/SMS asking them to book a Virtual Call with me via Teams. I limit these bookings to the same time each day for 2 maybe 3 days a week (the same time/days each week)I want multiple people to be able to book the same time I would like for the teams link to be automatically emailed to them along with a reminder of their booked time.
Just to add it would only be for myself so don’t need multiple staff members.
I’m guessing Bookings/Teams can do this but just trying to figure it out, any help would be appreciated. Thank you
Hi All, So I’m looking for the below and wondering if someone could help me please. I send an invite out to multiple people via Email/SMS asking them to book a Virtual Call with me via Teams. I limit these bookings to the same time each day for 2 maybe 3 days a week (the same time/days each week)I want multiple people to be able to book the same time I would like for the teams link to be automatically emailed to them along with a reminder of their booked time. Just to add it would only be for myself so don’t need multiple staff members. I’m guessing Bookings/Teams can do this but just trying to figure it out, any help would be appreciated. Thank you Read More
ICYMI: Great opportunities for Teams Publishers!
Does anyone here have a Teams transactable offer in the Marketplace? If you do, you could be eligible for $10K+ incentives.
READ MORE HERE
Does anyone here have a Teams transactable offer in the Marketplace? If you do, you could be eligible for $10K+ incentives.
READ MORE HERE Read More
Como puedo tomar como referencia de un archivo el contenido de una celda
Hola, necesito ayuda!
Tengo un archivo en excel (ArchivoA), que centraliza información de otros archivos excel (ArchivoB).
Requiero que en AchivoA pueda generar una fórmula que tome como referencia la ubicación del ARCHIVOB, pero que la ubicación del ArchivoB esté en una celda.
Esta es la dirección del ArchivoB que esta escrita en el ARCHIVOA celda CB5
Entonces, en el acrhivoA, requiero trabajar con una fórmula haciendo referencia a la celda CB5, pero que la considera como una ubicación.
=BUSCARV($A8;CB5;$B$2;FALSO)
Aplicó la fórmula Celda, con tipo nombre de archivo, pero tampoco funciona
=BUSCARV($A8;CELDA(“nombrearchivo”;CB5);$B$2;FALSO)
Agradeceré su amable apoyo.
Hola, necesito ayuda!Tengo un archivo en excel (ArchivoA), que centraliza información de otros archivos excel (ArchivoB).Requiero que en AchivoA pueda generar una fórmula que tome como referencia la ubicación del ARCHIVOB, pero que la ubicación del ArchivoB esté en una celda. Esta es la dirección del ArchivoB que esta escrita en el ARCHIVOA celda CB5Entonces, en el acrhivoA, requiero trabajar con una fórmula haciendo referencia a la celda CB5, pero que la considera como una ubicación.=BUSCARV($A8;CB5;$B$2;FALSO) Aplicó la fórmula Celda, con tipo nombre de archivo, pero tampoco funciona =BUSCARV($A8;CELDA(“nombrearchivo”;CB5);$B$2;FALSO) Agradeceré su amable apoyo. Read More
Windows Server Datacenter: Azure Edition preview build 26085 now available in Azure
Windows Server Datacenter: Azure Edition preview build 26085 now available in Azure
Hello Windows Server Insiders!
We welcome you to try Windows Server 2025 Datacenter: Azure Edition preview build 26085 in both Desktop experience and Core version on the Microsoft Server Operating Systems Preview offer in Azure. Azure Edition is optimized for operation in the Azure environment. For additional information, see Preview: Windows Server VNext Datacenter (Azure Edition) for Azure Automanage on Microsoft Docs. For more information about this build, see Announcing Windows Server Preview Build 26085 – Microsoft Community Hub.
Windows Server Datacenter: Azure Edition preview build 26085 now available in Azure
Hello Windows Server Insiders!
We welcome you to try Windows Server 2025 Datacenter: Azure Edition preview build 26085 in both Desktop experience and Core version on the Microsoft Server Operating Systems Preview offer in Azure. Azure Edition is optimized for operation in the Azure environment. For additional information, see Preview: Windows Server VNext Datacenter (Azure Edition) for Azure Automanage on Microsoft Docs. For more information about this build, see Announcing Windows Server Preview Build 26085 – Microsoft Community Hub.
Read More
What to Do When QuickBooks Error PS038 – Can’t Run or Update Payroll
I continually receiving messages telling me to update my QB and authorize my payroll, which prevents me from running payroll. My payroll has been adjusted. My payroll will not be processed even though I completed the online update before the deadline of August 28, 21. I have workers that require payment. I haven’t experienced this problem in my seven years of using QB. PS038 appears in a second pop-up window at the conclusion of the message. Please lend a hand!
I continually receiving messages telling me to update my QB and authorize my payroll, which prevents me from running payroll. My payroll has been adjusted. My payroll will not be processed even though I completed the online update before the deadline of August 28, 21. I have workers that require payment. I haven’t experienced this problem in my seven years of using QB. PS038 appears in a second pop-up window at the conclusion of the message. Please lend a hand! Read More
Teams Classic Client Slipping Away
The Teams classic client has been replaced by the Teams 2.1 client. Microsoft will block access to the Teams classic client for people running the app on unsupported platforms in October 2024. The final block swings into place for everyone on July 1 2025. The migration to the new client appears to be going well, so I’m not sure if many will miss the old client.
https://office365itpros.com/2024/04/29/teams-classic-client-slips-away/
The Teams classic client has been replaced by the Teams 2.1 client. Microsoft will block access to the Teams classic client for people running the app on unsupported platforms in October 2024. The final block swings into place for everyone on July 1 2025. The migration to the new client appears to be going well, so I’m not sure if many will miss the old client.
https://office365itpros.com/2024/04/29/teams-classic-client-slips-away/
Read More
Outlook show add service prompt
We have exchange 2016 on-prem.
Suddenly some users are prompted with a “add a service” window, while using outlook, which ask for credential with a message that “ no work credential are found” and showing the “local” domain account credential as “email’
we cannot understand which service is referring to since we did not make any change to the organization
Any idea why is this happening ?
It happens only to some users not all.
Most of them have Office 2021 Home & Business ed.
We have exchange 2016 on-prem.Suddenly some users are prompted with a “add a service” window, while using outlook, which ask for credential with a message that “ no work credential are found” and showing the “local” domain account credential as “email’we cannot understand which service is referring to since we did not make any change to the organizationAny idea why is this happening ?It happens only to some users not all.Most of them have Office 2021 Home & Business ed. Read More
FY24 Opportunities for Teams Publishers
Are you a Microsoft partner who has published a Teams app as well as a SaaS app in the Microsoft Commercial Marketplace?
If so, there is an incredible opportunity available to you through the end of June 2024.
Marketplace Incentives for FY24
Microsoft is offering a $10,000 incentive when you monetize your Teams app by pairing it with a transactable SaaS offer and transacting $10,000 through the marketplace. There are additional benefits for companies that qualify that elevate your profile with thousands of Microsoft Sellers. We will help you understand what it takes to qualify and share the steps to activate this incentive, but you need to act fast, it ends June 30, 2024!
You could qualify for free sessions to learn more – simply submit your email address and we’ll be in touch.
Elena Kennedy from Microsoft shares details about this incredible opportunity for Teams Publishers in this video:
Business Opportunities for Microsoft Teams Applications
Creating Microsoft Teams applications has led to an increased number of deals, larger deal sizes, and accelerated deal time. A Forrester total economic impact report showed impressive metrics for business opportunities for Microsoft Teams applications sold through the commercial marketplace. The report found an increased number of deals at 40 to 300% higher, increased deal sizes up to 650%, and deals closing up to 76% faster on the commercial marketplace.
What can you do today?
Don’t miss this opportunity to monetize your Teams app and elevate your profile with thousands of Microsoft Sellers. Create a transactable SaaS offer if you don’t have one already, and link your Teams app to your transactable SaaS offer today to monetize your Teams app. If you need help, simply submit your email address and we’ll be in touch.
Microsoft Tech Community – Latest Blogs –Read More
Help with formulas
Hello! I am having trouble with a xlookup formula and need gudiance in how to resolve.
Here is the issue:
In Column H I have the following formula H3 =MID(C3,21,3) which displays 131
Now on column N3, I have this formula: XLOOKUP(H3, Final!B4:B140, Final!C4:C140) but i am getting a #NA instead of getting “cash. Any thoughts? see attached.
Please attached file tab 8852
Hello! I am having trouble with a xlookup formula and need gudiance in how to resolve. Here is the issue: In Column H I have the following formula H3 =MID(C3,21,3) which displays 131 Now on column N3, I have this formula: XLOOKUP(H3, Final!B4:B140, Final!C4:C140) but i am getting a #NA instead of getting “cash. Any thoughts? see attached.Please attached file tab 8852 Read More
Microsoft Purview Scan on Azure SQL Server DB issue
Hi @All,
I’m new on Microsoft Purview.
I have create a Azure SQL DataBase and i want scan with Purview.
1) Created a “Data Map”
2) Created a “Assets”
3) Created a “Data sources”
In Azure Database Server my user is in the “Reader” and “Managed Application Reader” group.
In the database I have set the authentication method as “AAD and SQL”.
I set a secret in “Key Vault” with login information for the database owner.
When I try to run a scan from Purview, the connection test fails.
1) With credential “Microsoft Purview MSI (system)”
2) With “SQL Authentication” using Key Vault
I don’t know where I’m wrong.
Checking the configuration on Azure SQL Server in “Microsoft Entra ID” I see that “Microsoft Purview access policies”
it is not Governed
Can anyone tell me how to fix the connection issue?
Thanks in advance.
Dario
Hi @All,I’m new on Microsoft Purview.I have create a Azure SQL DataBase and i want scan with Purview.1) Created a “Data Map”2) Created a “Assets”3) Created a “Data sources” In Azure Database Server my user is in the “Reader” and “Managed Application Reader” group.In the database I have set the authentication method as “AAD and SQL”.I set a secret in “Key Vault” with login information for the database owner.When I try to run a scan from Purview, the connection test fails.1) With credential “Microsoft Purview MSI (system)” 2) With “SQL Authentication” using Key Vault I don’t know where I’m wrong.Checking the configuration on Azure SQL Server in “Microsoft Entra ID” I see that “Microsoft Purview access policies”it is not Governed Can anyone tell me how to fix the connection issue?Thanks in advance.Dario Read More
We are having issues with windows 11 activation, devices no longer upgrade to Enterprise
We are having issues with windows 11 activation, devices no longer upgrade to Enterprise. We have checked on the allocated licenses and conditional access policies. Microsoft 365 E3 licenses are allocated and windows store app is excluded from MFA conditional access policy. Please let me know if anything is missed here.
We are having issues with windows 11 activation, devices no longer upgrade to Enterprise. We have checked on the allocated licenses and conditional access policies. Microsoft 365 E3 licenses are allocated and windows store app is excluded from MFA conditional access policy. Please let me know if anything is missed here. Read More