Skip Ribbon Commands
Skip to main content

​​​​​​​

ಕ್ವಿಕ್‌ಸ್ಟಾರ್ಟ್: ಒಂದು ಹವಾಮಾನ ಟೈಲ್ ಮತ್ತು ಟೋಸ್ಟ್ ಸೂಚನೆಯನ್ನು ಕಳುಹಿಸುವಿಕೆ


ವಿಂಡೋಸ್ 10 ರ ವಾರ್ಷಿಕೋತ್ಸವದ ಅಪ್‌ಡೇಟ್‌ನಲ್ಲಿ, ನಾವು ಟೋಸ್ಟ್‌ ಸೂಚನೆಗಳನ್ನು ಲೈವ್‌ ಟೈಲ್‌ಗಳಂತೆಯೆ ಉತ್ತಮವಾಗಿ ಕಾಣಿಸುವಂತೆ ಮಾಡಿದ್ದೇವೆ. ಈ ಕ್ವಿಕ್‌ಸ್ಟಾರ್ಟ್‌ನಲ್ಲಿ, ನೀವು ನಿಮ್ಮ ಟೈಲ್ ಸೂಚನೆಯ 5-ದಿನದ ಹವಾಮಾನ ವರದಿಯನ್ನು ತೋರಿಸಲು ಒಂದು ಟೋಸ್ಟ್ ಸೂಚನೆಯನ್ನು ಹೇಗೆ ಕಳುಹಿಸುವುದು ಎಂಬುದನ್ನು ನಾವು ತೋರಿಸುತ್ತೇವೆ.


ಅಗಲವಾದ ಲೈವ್ ಟೈಲ್

ಟೋಸ್ಟ್ ಸೂಚನೆ

. NotificationsExtensions NuGet ಪ್ಯಾಕೇಜ್ ಅನುಸ್ಥಾಪನೆ

ಕೋಡ್ ಮುಖಾಂತರ ಸೂಚನೆಗಳನ್ನು ರಚಿಸಲು, NotificationsExtensions ಅನ್ನು ಬಳಸುವಂತೆ ನಾವು ಬಲವಾಗಿ ಸಲಹೆ ಮಾಡುತ್ತೇವೆ, ಇದು ಸೂಚನಾ XML ಕಂಟೆಂಟ್‌ಗಾಗಿ ಒಂದು ಆಬ್ಜೆಕ್ಟ್ ಮಾದರಿಯನ್ನು ಒದಗಿಸುತ್ತದೆ. ನೀವು ಕೈಯಾರೆ ಸೂಚನಾ XML ಅನ್ನು ರಚಿಸಬಹುದು, ಆದರೆ ಅದು ದೋಷಪೂರಿತ ಹಾಗು ಗೊಂದಲಕ್ಕೆ ಕಾರಣವಾಗುವ ಸಾಧ್ಯತೆ ಇದೆ. NotificationsExtensions ಅನ್ನು ಮೈಕ್ರೋಸಾಫ್ಟ್‌ನ ಸೂಚನೆಗಳನ್ನು ನೋಡಿಕೊಳ್ಳುವ ತಂಡದಿಂದ ನಿರ್ಮಿಸಲಾಗಿದೆ ಮತ್ತು ಅದೇ ನೋಡಿಕೊಳ್ಳುತ್ತಿದೆ.

NotificationsExtensions.Win10 ಅನ್ನು NuGet ನಿಂದ ಅನುಸ್ಥಾಪಿಸಿ (ನೀವು ಆವೃತ್ತಿ 14332.0.0 ಅಥವ ನಂತರದ್ದನ್ನು ಆರಿಸಿದ್ದೀರಿ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ).

2. ನೇಮ್‌ಸ್ಪೇಸ್ ಘೋಷಣೆಗಳನ್ನು ಸೇರಿಸಿ

ವಿಂಡೋಸ್.UI.ನೋಟಿಫಿಕೇಶನ್‌ಗಳು ಟೈಲ್ಸ್ ಮತ್ತು ಟೋಸ್ಟ್ APIಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ.

C# with NotificationsExtensions 

using NotificationsExtensions;

using NotificationsExtensions.Tiles;

using NotificationsExtensions.Toasts;

3. ಲೈವ್ ಟೈಲ್ ಅನ್ನು ಹೇಗೆ ರಚಿಸುವುದು

ಮೊದಲಿಗೆ ಲೈವ್ ಟೈಲ್ ಅನ್ನು ಹೇಗೆ ರಚಿಸುವುದು ಎಂಬುದನ್ನು ವಿವರಿಸುತ್ತೇವೆ, ಏಕೆಂದರೆ ಇದೇ ರೀತಿಯ ಅಡಾಪ್ಟೀವ್ ಕಂಟೆಂಟ್ ಅನ್ನು ಟೋಸ್ಟ್ ಸೂಚನೆಯಲ್ಲಿಯೂ ಬಳಸಲಾಗುತ್ತದೆ. ನಿಮಗೆ ಅಡಾಪ್ಟೀವ್ ಸೂಚನೆ ಹೊಸತಾಗಿದ್ದರೆ, ಸ್ಟೋರ್‌ನಿಂದ ನೋಟಿಫಿಕೇಶನ್ ವೀಶುವಲೈಸರ್ ಅನ್ನು ಅನುಸ್ಥಾಪಿಸಿ, ಇದು ನಿಮಗೆ ಅಡಾಪ್ಟೀವ್ ಕಂಟೆಂಟ್ ಅನ್ನು ಸಂಪಾದಿಸಲು ಮತ್ತು ತಕ್ಷಣದ ವೀಶುವಲ್ ಮುನ್ನೋಟವನ್ನು ನೋಡಲು ನೆರವಾಗುತ್ತದೆ.

ಟೈಲ್ ಸೂಚನೆಯನ್ನು ಉಪಗುಂಪುಗಳಗಾಗಿ ವಿಭಜಿಸಿ

ನಾವು ರಚಿಸಲು ಬಯಸುವ ಟೈಲ್‌ ನೋಟಿಫಿಕೇಶನ್‌ಗಳು ವಾಸ್ತವದಲ್ಲಿ 5 ಉಪಗುಂಪುಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ… ಪ್ರತಿ ದಿನದ ಹವಾಮಾನವರದಿಗೆ ಒಂದೊಂದರಂತೆ. ಈ ಕೆಳಗಿನ ಚಿತ್ರದಲ್ಲಿ, ಎರಡನೆ ಉಪಗುಂಪನ್ನು ಕೆಂಪುಬಣ್ಣದಲ್ಲಿ ಹೈಲೈಟ್ ಮಾಡಲಾಗಿದೆ. ನಾವು ಉಪಗುಂಪಿನ ಕೋಡ್ ಅನ್ನು ಒಂದು ಬಾರಿ ಮಾತ್ರ ಬರೆಯುವಂತೆ, ಈ ಉಪಗುಂಪುಗಳನ್ನು ಉತ್ಪಾದಿಸುವ ಒಂದು ವಿಧಾನವನ್ನು ನಾವು ರಚಿಸಲು ಸಾಧ್ಯವಿರುತ್ತದೆ


C# with NotificationsExtensions

 

private AdaptiveSubgroup GenerateSubgroup(string day, string img, int tempHi, int tempLo)

{

    return new AdaptiveSubgroup()

    {

        HintWeight = 1,

 

        Children =

        {

            // Day

            new AdaptiveText()

            {

                Text = day,

                HintAlign = AdaptiveTextAlign.Center

            },

 

            // Image

            new AdaptiveImage()

            {

                Source = img,

                HintRemoveMargin = true

            },

 

            // High temp

            new AdaptiveText()

            {

                Text = tempHi + "°",

                HintAlign = AdaptiveTextAlign.Center

            },

 

            // Low temp

            new AdaptiveText()

            {

                Text = tempLo + "°",

                HintAlign = AdaptiveTextAlign.Center,

                HintStyle = AdaptiveTextStyle.CaptionSubtle

            }

        }

    };

}

ಅಗಲವಾದ ಟೈಲ್‌ಗಾಗಿ ಕಂಟೆಂಟ್ ಅನ್ನು ಉತ್ಪಾದಿಸುವಿಕೆ

ನಂತರ, ನಾವು ಅಗಲವಾದ ಟೈಲ್‌ಗಾಗಿ ಮೇಲಿನಿಂದ ನಮ್ಮ ಉಪಗುಂಪುಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಕಂಟೆಂಟ್ ಅನ್ನು ರಚಿಸಬೇಕಿರುತ್ತದೆ. ನಾವು ಇದನ್ನು ಒಂದು ಪ್ರತ್ಯೇಕ ವಿಧಾನವಾಗಿ ವಿಂಗಡಿಸೋಣ, ಏಕೆಂದರೆ ನಮಗೆ ಚಿಕ್ಕ ಮತ್ತು ಅಗಲ ಹಾಗೂ ದೊಡ್ಡದಾದ ಟೈಲ್ ಕಂಟೆಂಟ್ ಅನ್ನು ರಚಿಸುವುದಕ್ಕಾಗಿಯೂ ಕೂಡಾ ವಿಧಾನದ ಅಗತ್ಯವಿರುತ್ತದೆ (ಈ ವಿಧಾನಗಳನ್ನು ಈ ಕ್ವಿಕ್‌ಸ್ಟಾರ್ಟ್‌ರ್‌ನಿಂದ ಬಿಡಲಾಗಿದೆ ಆದರೆ ಕೆಳಭಾಗದಲ್ಲಿರುವ ಸಂಪನ್ಮೂಲಗಳಲ್ಲಿ ಲಭ್ಯವಿರುವ ಸಂಪೂರ್ಣ ಕೋಡ್‌ನ ಮಾದರಿಯಲ್ಲಿ ಇದನ್ನು ನೋಡಬಹುದಾಗಿರುತ್ತದೆ).



C# with NotificationsExtensions

 

private TileBinding GenerateTileBindingWide()

{

    return new TileBinding()

    {

        Content = new TileBindingContentAdaptive()

        {

            Children =

            {

                new AdaptiveGroup()

                {

                    Children =

                    {

                        GenerateSubgroup("Mon", "Mostly Cloudy.png", 63, 42),

                        GenerateSubgroup("Tue", "Cloudy.png", 57, 38),

                        GenerateSubgroup("Wed", "Sunny.png", 59, 43),

                        GenerateSubgroup("Thu", "Sunny.png", 62, 42),

                        GenerateSubgroup("Fri", "Sunny.png", 71, 66)

                    }

                }

            }

        }

    };

}

ಟೈಲ್ ನೋಟಿಫಿಕೇಶನ್ ಕಂಟೆಂಟ್ ಅನ್ನು ರಚಿಸಿ

ಅಂತಿಮವಾಗಿ, ನಾವು ವಿವಿಧ ಬಗೆಯ ಗಾತ್ರದ ಎಲ್ಲಾ ಟೈಲ್‌ಗಾಗಿನ ಕಂಟೆಂಟ್ ಅನ್ನು ಹೊಂದಿರುವ ಸಂಪೂರ್ಣ ಟೈಲ್ ನೋಟಿಫಿಕೇಶನ್ ಕಂಟೆಂಟ್ ಅನ್ನು ಉತ್ಪಾದಿಸುತ್ತೇವೆ.  ನಾವು ಈ ಮೊದಲೆ ತಿಳಿಸಿದಂತೆ, ಚಿಕ್ಕದು, ಮಧ್ಯಮ ಮತ್ತು ದೊಡ್ಡವುಗಳಿಗಾಗಿನ ವಿಧಾನಗಳನ್ನು ಈ ಕ್ವಿಕ್‌ಸ್ಟಾರ್ಟರ್‌ನಿಂದ ಕೈಬಿಡಲಾಗಿದೆ ಆದರೆ ಸಂಪನ್ಮೂಲದ ವಿಭಾಗದಲ್ಲಿ ಲಭ್ಯವಿರುವ ಸಂಪೂರ್ಣ ಕೋಡ್‌ನ ಮಾದರಿಯಲ್ಲಿ ಇದನ್ನು ನೋಡಬಹುದಾಗಿರುತ್ತದೆ.

C# with NotificationsExtensions

 

public TileContent GenerateTileContent()

{

    return new TileContent()

    {

        Visual = new TileVisual()

        {

            TileSmall = GenerateTileBindingSmall(),

            TileMedium = GenerateTileBindingMedium(),

            TileWide = GenerateTileBindingWide(),

            TileLarge = GenerateTileBindingLarge(),

 

            // Set the base URI for the images, so we don't redundantly specify the entire path

            BaseUri = new Uri("Assets/NotificationAssets/", UriKind.Relative)

        }

    };

}

ಟೈಲ್ ಸೂಚನೆಯನ್ನು ಕಳುಹಿಸುವಿಕೆ

ಟೈಲ್ ಸೂಚನೆಯನ್ನು ಹೇಗೆ ಕಳುಹಿಸುವುದು ಎಂಬುದನ್ನು ಅರಿಯಲು Quickstart: ಒಂದು ಸ್ಥಳೀಯ ಟೈಲ್ ಸೂಚನೆಯನ್ನು ಕಳುಹಿಸುವಿಕೆ ಅನ್ನು ನೋಡಿ.

4. ಟೋಸ್ಟ್ ಸೂಚನೆಯನ್ನು ಹೇಗೆ ರಚಿಸುವುದು

ನಾವು ಈಗ ಲೈವ್ ಟೈಲ್ ಸೂಚನೆಯನ್ನು ಹೊಂದಿರುವುದರಿಂದ,  ಟೈಲ್ ಸೂಚನೆಯನ್ನು ರಚಿಸಲು ನಾವು ಒಂದಿಷ್ಟು ಕೋಡ್ ಅನ್ನು ಬಳಸಿಕೊಳ್ಳೋಣ!


ಟೈಲ್ ಸೂಚನೆಯ ಕಂಟೆಂಟ್ ಅನ್ನು ರಚಿಸಿ

ಟೋಸ್ಟ್‌ಗಳು ಯಾವಾಗಲೂ ಒಂದು ಪಠ್ಯ ಘಟಕದಿಂದ ಆರಂಭಗೊಳ್ಳಬೇಕು, ಆದ್ದರಿಂದ ಇಂದಿನ ಹವಾಮಾನವನ್ನು ವಿವರಿಸುವ ಒಂದು ಪಠ್ಯ ವಾಕ್ಯಾಂಶವನ್ನು ನಾವು ಮೊದಲಿಗೆ ಸೇರಿಸೋಣ. ಅಡಾಪ್ಟೀವ್ ಟೋಸ್ಟ್‌ಗಳಿಗೆ ಬೆಂಬಲವಿದ್ದಲ್ಲಿ (ಕೋಡ್‌ಗಾಗಿ ಇನ್ನೂ ಕೆಳಗೆ ನೋಡಿ), ನಾವು ನಮ್ಮ ಲೈವ್‌ ಟೈಲ್‌ನಲ್ಲಿಯೂ ಸಹ ಬಳಸಿದ ಐದು ಉಪಗುಂಪುಗಳನ್ನು ಹೊಂದಿರುವ ಒಂದು ಗುಂಪನ್ನು ಸೇರಿಸುತ್ತೇವೆ. ಇಲ್ಲದೆ ಹೋದಲ್ಲಿ, ನಾವು ಅಡಾಪ್ಟೀವ್ ಟೋಸ್ಟ್ ಅನ್ನು ಬೆಂಬಲಿಸದೆ ಇರುವ ವ್ಯವಸ್ಥೆಗೆ ಇನ್ನೂ ಎರಡು ಪಠ್ಯ ಘಟಕಗಳನ್ನು ಸೇರಿಸುತ್ತೇವೆ (ಈ ವ್ಯವಸ್ಥೆಗಳಲ್ಲಿ, ನೀವು ಗರಿಷ್ಟ ಮೂರು ಪಠ್ಯ ಘಟಕಗಳನ್ನು ಹೊಂದಿರಲು ಸಾಧ್ಯವಿರುತ್ತದೆ, ಆದ್ದರಿಂದ ನಾವು ಎರಡು ಹೆಚ್ಚುವರಿ ಪಠ್ಯ ಘಟಕಗಳನ್ನು ಸೇರಿಸಿದ್ದೇವೆ).

C# with NotificationsExtensions

 

public static ToastContent GenerateToastContent()

{

    // Start by constructing the visual portion of the toast

    ToastBindingGeneric binding = new ToastBindingGeneric();

 

    // We'll always have this summary text on our toast notification

    // (it is required that your toast starts with a text element)

    binding.Children.Add(new AdaptiveText()

    {

        Text = "Today will be mostly sunny with a high of 63 and a low of 42."

    });

 

    // If Adaptive Toast Notifications are supported

    if (IsAdaptiveToastSupported())

    {

        // Use the rich Tile-like visual layout

        binding.Children.Add(new AdaptiveGroup()

        {

            Children =

            {

                GenerateSubgroup("Mon", "Mostly Cloudy.png", 63, 42),

                GenerateSubgroup("Tue", "Cloudy.png", 57, 38),

                GenerateSubgroup("Wed", "Sunny.png", 59, 43),

                GenerateSubgroup("Thu", "Sunny.png", 62, 42),

                GenerateSubgroup("Fri", "Sunny.png", 71, 66)

            }

        });

    }

 

    // Otherwise...

    else

    {

        // We'll just add two simple lines of text

        binding.Children.Add(new AdaptiveText()

        {

            Text = "Monday <img src="https://s.w.org/images/core/emoji/72x72/26c5.png" alt="⛅" draggable="false" class="emoji"> 63° / 42°"

        });

 

        binding.Children.Add(new AdaptiveText()

        {

            Text = "Tuesday <img src="https://s.w.org/images/core/emoji/72x72/2601.png" alt="☁" draggable="false" class="emoji"> 57° / 38°"

        });

    }

 

    // Construct the entire notification

    return new ToastContent()

    {

        Visual = new ToastVisual()

        {

            // Use our binding from above

            BindingGeneric = binding,

 

            // Set the base URI for the images, so we don't redundantly specify the entire path

            BaseUri = new Uri("Assets/NotificationAssets/", UriKind.Relative)

        },

 

        // Include launch string so we know what to open when user clicks toast

        Launch = "action=viewForecast&zip=98008"

    };

}

ಟೋಸ್ಟ್ ಸೂಚನೆಯನ್ನು ಕಳುಹಿಸುವಿಕೆ

ಟೋಸ್ಟ್ ಸೂಚನೆಯನ್ನು ಹೇಗೆ ಕಳುಹಿಸುವುದು ಎಂದು ತಿಳಿದುಕೊಳ್ಳಲು (ಮತ್ತು ಬಳಕೆದಾರರು ಸೂಚನೆಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡುವುದನ್ನು ನಿಭಾಯಿಸಲು) Quickstart: ಸ್ಥಳೀಯ ಟೋಸ್ಟ್ ಸೂಚನೆಯನ್ನು ಕಳುಹಿಸುವಿಕೆ ಮತ್ತು ಸಕ್ರಿಯಗೊಳಿಸುವಿಕೆಯನ್ನು ನಿಭಾಯಿಸುವುದು ಅನ್ನು ನೋಡಿ

ಅಡಾಪ್ಟೀವ್ ಟೋಸ್ಟ್ ಅನ್ನು ಬೆಂಬಲಿಸಲಾಗುತ್ತದೆಯೆ ಎಂದು ಪರೀಕ್ಷಿಸುವುದು

ಅಡಾಪ್ಟೀವ್ ಟೋಸ್ಟ್‌ಗಳನ್ನು ವಿಂಡೋಸ್ 10 ಡೆಸ್ಕ್‌ಟಾಪ್‌  ಮತ್ತು ಮೊಬೈಲ್‌ನ ನಿರ್ಮಾಣ 14332 ರಲ್ಲಿ ಸೇರಿಸಲಾಗಿದೆ (ವಿಂಡೋಸ್ 10 ರ ವಾರ್ಷಿಕೋತ್ಸವ ಅಪ್‌ಡೇಟ್‌ನಲ್ಲಿ.). ಇತರೆ ಸಾಧನ ಕುಲಗಳು ಅಡಾಪ್ಟೀವ್ ಟೋಸ್ಟ್‌ಗಳನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ, ಮತ್ತು ಇದು ಕೇವಲ ಪಠ್ಯ ಘಟಕಗಳನ್ನು ಮತ್ತು ಚಿತ್ರಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ. ನೀವು ಹಳೆಯ ವ್ಯವಸ್ಥೆಗಳನ್ನು ಬೆಂಬಲಿಸುತ್ತಿದ್ದಲ್ಲಿ, ನಿಮಗೆ ಎರಡು ಆಯ್ಕೆಗಳು ಇರುತ್ತವೆ: ಅದೇ ಪೇಲೋಡ್ ಅನ್ನು ಕಳುಹಿಸಿ (ಹಳೆಯ ವ್ಯವಸ್ಥೆಗಳಲ್ಲಿ ಕೇವಲ ಗುಂಪುಗಳನ್ನು ಬಿಟ್ಟುಬಿಡಲಾಗುತ್ತದೆ), ಅಥವ ನಿಮ್ಮ ಕೋಡ್ ಅನ್ನು ಕವಲಾಗಿಸಿ (ಫೋರ್ಕ್) ಮತ್ತು ಅಡಾಪ್ಟೀವ್ ಟೋಸ್ಟ್ ಬೆಂಬಲಿತವಾಗಿದೆಯೆ ಎಂಬುದರ ಮೇರೆಗೆ ನಿಶ್ಚಿತ ಸೂಚನೆಗಳನ್ನು ಕಳುಹಿಸಿ. ನಾವು ಕಣ್ಣುಗಳಿಗೆ ಸುಂದರವಾಗಿ ಕಾಣಿಸುವ ಸೂಚನೆಗಳನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವೆ ಎಂದು ತಿಳಿಸಲು ನಾವು ಬಳಸುವ ವಿಧಾನವನ್ನು ಇಲ್ಲಿ ನೀಡಲಾಗಿದೆ...

C# 

using Windows.System.Profile; 

private static bool IsAdaptiveToastSupported()

{

    switch (AnalyticsInfo.VersionInfo.DeviceFamily)

    {

        // Desktop and Mobile started supporting adaptive toasts in build 14332

        case "Windows.Mobile":

        case "Windows.Desktop":

            return GetOSVersion() > new Version(10, 0, 14332, 0);

 

        // Other device families do not support adaptive toasts

        default:

            return false;

    }

}

 

private static Version GetOSVersion()

{

    // The DeviceFamilyVersion is a string, which is actually a ulong number representing the version

    // https://www.suchan.cz/2015/08/uwp-quick-tip-getting-device-os-and-app-info/

 

    ulong versionAsLong = ulong.Parse(AnalyticsInfo.VersionInfo.DeviceFamilyVersion);

 

    ulong v1 = (versionAsLong & 0xFFFF000000000000L) >> 48;

    ulong v2 = (versionAsLong & 0x0000FFFF00000000L) >> 32;

    ulong v3 = (versionAsLong & 0x00000000FFFF0000L) >> 16;

    ulong v4 = (versionAsLong & 0x000000000000FFFFL);

 

    return new Version((int)v1, (int)v2, (int)v3, (int)v4);

}

ಅಂತಿಮ ಟೋಸ್ಟ್ ನೋಟಿಫಿಕೇಶನ್

ಅಡಾಪ್ಟೀವ್ ಟೋಸ್ಟ್ ಅನ್ನು ಬೆಂಬಲಿಸುವ ವ್ಯವಸ್ಥೆಗಳಿಗಾಗಿ, ನಮ್ಮ ಕೋಡ್ ಕಣ್ಣುಗಳಿಗೆ ಸುಂದರವಾಗಿ ಕಾಣಿಸುವ ಸೂಚನೆಯನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ. ಮತ್ತು ಇತರೆ ಹಳೆಯ ವ್ಯವಸ್ಥೆಗಳಲ್ಲಿ, ನಮ್ಮ ಕೋಡ್ ಪರಂಪರಾಗತವಾದ ಪಠ್ಯ-ಆಧರಿತವಾದ ಸೂಚನೆಯನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ.


ಅಡಾಪ್ಟೀವ್ ಟೋಸ್ಟ್

ಸಾಂಪ್ರದಾಯಿಕ ಟೋಸ್ಟ್

​​​​​​​​

Read More on....

This site uses Unicode and Open Type fonts for Indic Languages. Powered by Microsoft SharePoint
©2017 Microsoft Corporation. All rights reserved.