Τρόπος διαχείρισης της πολύγλωσσης λύσεις φορμών Web στο Visual Studio .NET ή Visual Studio 2005

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 315903 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Αυτό το αρχείο έχει αρχειοθετηθεί. Προσφέρεται “ως έχει” και δεν θα ενημερώνεται πια.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Περίληψη

Αυτό το άρθρο περιγράφει τον τρόπο χρήσης μιας δεδομένων XML-Νησί και το .NETXMLWeb ελέγχου του διακομιστή για τη δημιουργία ενός μικρού, πολύγλωσσο έργο εφαρμογών που εμφανίζει δεδομένα Extensible Markup Language (XML). Η κύρια εφαρμογή είναι ενσωματωμένη στη Visual Basic .NET ή Visual Basic 2005. Η εφαρμογή χρησιμοποιεί ένα στοιχείο Visual C# κλάσης βιβλιοθήκης για την απεικόνιση της πολύγλωσσης αναφορές και υλοποίηση της μεταβίβασης.

ΑΠΑΙΤΗΣΕΙΣ

Η ακόλουθη λίστα περιγράφει τα υλικού που συνιστώνται, λογισμικό, υποδομή δικτύου και τα service pack που χρειάζεστε:
  • Τα Microsoft Windows 2000 Professional, τα Microsoft Windows 2000 Server, τα Microsoft Windows XP Professional ή Microsoft Windows XP Server με το Microsoft .NET Framework και το Microsoft Visual Studio .NET εγκατεστημένο
Αυτό το άρθρο προϋποθέτει ότι είστε εξοικειωμένοι με τα ακόλουθα θέματα:
  • Υλοποίηση της μεταβίβασης
  • XML και Extensible Stylesheet Language Transformation (XSLT)
  • Τα στοιχεία ελέγχου διακομιστή web Microsoft .NET

Δημιουργία μιας εφαρμογής Web του ASP.NET πολυγλωσσική

Στα παρακάτω βήματα, μπορείτε να δημιουργήσετε ένα μικρό έργο εφαρμογής Web του ASP.NET που επιτρέπει σε έναν πελάτη, για να επιλέξετε στοιχεία μενού μεσημεριανό βάσει θερμίδα μέτρηση. Για να το κάνετε αυτό, το δείγμα χρησιμοποιεί τοXMLΈλεγχος διακομιστή Web, ένα απλό έγγραφο XML που περιέχει τα δεδομένα του μενού και ένα φύλλο στυλ XSL για τη μετατροπή των δεδομένων XML. Για ναXsltArgumentListκλάσης από τοSystem.Xml.xslχώρος ονομάτων σας επιτρέπει να χρησιμοποιήσετε παραμέτρους με το μετασχηματισμό.
  1. Δημιουργήστε ένα έργο της Visual Basic εφαρμογής Windows ως εξής:
    1. Ξεκινήστε το Microsoft Visual Studio .NET ή Microsoft Visual Studio 2005 και, στη συνέχεια, κάντε κλικ στο κουμπίΝέο έργο.
    2. underΤύποι έργουΚάντε κλικΈργα της Visual Basic. underΠρότυπαΚάντε κλικΕφαρμογή Web του ASP.NET. Μετονομασία του έργουΜενού (Menu), και στη συνέχεια κάντε κλικ στο κουμπίOk.

      ΣΗΜΕΙΩΣΗΣτο Visual Studio 2005, κάντε κλικ στο κουμπίVisual BasicunderΤύποι έργου.
  2. Βεβαιωθείτε ότι είναι ορατό το παράθυρο του Solution Explorer. Εάν δεν είναι, πιέστε το συνδυασμό πλήκτρων CTRL + ALT + L.
  3. Τώρα έχετε το κέλυφος ενός έργου Visual Basic .NET ή Visual Basic της εφαρμογής Web 2005 στα πλαίσια μιας λύσης με το όνομα μενού. Για να κάνετε μια πολυγλωσσική λύση, πρέπει να προσθέσετε μια Visual βιβλιοθήκη κλάσης C#.

    Με τη λύση παράθυρο του Explorer, κάντε δεξιό κλικΜενού (Menu), τοποθετήστε το δείκτηADD, και στη συνέχεια κάντε κλικ στο κουμπίΝέο έργο. underΤύποι έργουΚάντε κλικΤο Visual C# έργα. underΠρότυπαΚάντε κλικΒιβλιοθήκη κλάσης. Διατηρήστε το προεπιλεγμένο όνομα ClassLibrary1. Κάντε κλικOkΓια να προσθέσετε αυτήν τη βιβλιοθήκη κλάσης της λύσης.

    ΣΗΜΕΙΩΣΗΣτο Visual Studio 2005, κάντε κλικ στο κουμπίΤο Visual C#underΤύποι έργου.
  4. Class1.CS εμφανίζεται στο παράθυρο του προγράμματος επεξεργασίας. Προσθέστε την ακόλουθη δήλωση πεδίου ονόματος στην αρχή αυτού του παραθύρου:
    using System.Xml.Xsl;
    					
  5. underδημόσια Class1, προσθέστε τον ακόλουθο κώδικα:
    public XsltArgumentList CreateArgumentList(
    string ParamName, string NamespaceURI, string ParamValue)
    {
     XsltArgumentList tal = new XsltArgumentList();
     tal.AddParam(ParamName, NamespaceURI, ParamValue);
     return tal;
    }
    					
  6. Τώρα έχετε μια Visual C# κλάσης που λαμβάνει πληροφορίες παραμέτρων XSLT και που επιστρέφει μια παρουσία τουXsltArgumentListCLASS. Τώρα μπορείτε να δημιουργήσετε την εφαρμογή της Visual Basic που θα καταναλώσει αυτού του στοιχείου.

    WebForm1.aspx πρέπει να είναι ήδη ανοιχτή σε προβολή σχεδίασης. Σε αντίθετη περίπτωση, κάντε διπλό κλικWebForm1.aspxστο παράθυρο του Solution Explorer. Κάντε κλικ στην καρτέλαΣχεδίασηκαρτέλα κάτω από το παράθυρο του προγράμματος επεξεργασίας για να μεταβείτε σε προβολή σχεδίασης.
  7. Πιέστε το πλήκτρο F4 για να αποκτήσετε πρόσβαση στη σελίδα ιδιοτήτων. Αλλαγή τουpageLayoutη ιδιότητα ναFlowLayout.
  8. On the Web Form, typeMaximum Calories:.
  9. Προσθήκη ενόςΠλαίσιο κειμένουστοιχείο ελέγχου, έναΚουμπίcontrol, and anXMLcontrol to the form as follows:
    1. Press the CTRL+ALT+X key combination to open the toolbox.
    2. Στην εργαλειοθήκη, κάντε κλικ στο κουμπίΦόρμες Web.
    3. Σύρετε έναΠλαίσιο κειμένουστοιχείο ελέγχου και έναΚουμπίcontrol from the toolbox, and drop these controls onto the Web Form.
    4. Press F4 to access the property page for theΚουμπίControl.
    5. Αλλαγή τουTextη ιδιότητα ναFilter Menu.
    6. Position the cursor after the button, and then press ENTER to position the cursor for theXMLControl.
    7. Drag anXMLWeb server control from the toolbox, and drop this control onto the Web Form.
    8. Press F4 to access the property page of theXMLControl.
    9. Αλλαγή τουDocumentSourceη ιδιότητα ναMenu.xml, και στη συνέχεια αλλάξτε τοTransformSourceη ιδιότητα ναMenu.xslt.
  10. Διπλό κλικFilter Menuto create aΚάντε κλικevent handler in the code-behind class of the Web Form. Before you add code to the handler, you must add a reference to the Visual C# Class Library as follows:
    1. In the Solution Explorer window, underClassLibrary1Κάντε δεξιό κλικ στο στοιχείοΑναφορές, και στη συνέχεια κάντε κλικ στο κουμπίΠροσθήκη αναφοράς.
    2. Στο διακομιστήΈργακαρτέλα, κάντε διπλό κλικClassLibrary1. Notice thatClassLibrary1appears in theΕπιλεγμένα στοιχείαπλαίσιο λίστας.
    3. Κάντε κλικOk. Notice thatClassLibrary1appears underΑναφορέςin the Web Application.
  11. Προσθέστε τον ακόλουθο κώδικα για τοΚάντε κλικτο πρόγραμμα χειρισμού συμβάντων:
    Dim myArgList As New ClassLibrary1.Class1()
    Xml1.TransformArgumentList = myArgList.CreateArgumentList("calories", "", TextBox1.Text)
    Xml1.Visible = True
    						
    The argument list that the Visual C# component returns allows you to pass the value of theΠλαίσιο κειμένουcontrol as a parameter to the stylesheet. This stylesheet uses XSLT commands to filter out all lunch menu items that exceed the calorie count that the customer types. The following line of code from the stylesheet illustrates how the parameter is received and used:
    <xsl:for-each select="lunch-menu/food[calories <= $calories]">
    					
  12. Use the code from theMenu.xmlκαι τοMenu.xsltsections to create the Menu.xml and Menu.xslt files. In the Solution Explorer window, right-click the Menu project, and then add the .xml and .xslt files.

Ολοκλήρωση της λίστας κωδικών

Menu.xml

<?xml version='1.0'?>
<lunch-menu>
  <food>
    <name>Cheese Pizza</name>
    <price>$6.95</price>
    <description>Individual deep-dish pizza with lots of mozzarella cheese</description>
    <calories>800</calories>
  </food>
  <food>
    <name>Pepperoni Pizza</name>
    <price>$7.95</price>
    <description>Individual deep-dish cheese pizza with thick-cut pepperoni slices</description>
    <calories>950</calories>
  </food>
  <food>
    <name>The "Everything" Pizza</name>
    <price>$9.95</price>
    <description>Individual deep-dish pizza with all our toppings. House specialty!</description>
    <calories>800</calories>  </food>
  <food>
    <name>Hungarian Ghoulash</name>
    <price>$4.50</price>
    <description>Large serving in a sourdough bread bowl. A_local delight!</description>
    <calories>600</calories>
  </food>
  <food>
    <name>Maisey's Pork Sandwich</name>
    <price>$6.95</price>
    <description>A fresh pork fillet, deep-fried to perfection. Served with fries.</description>
    <calories>950</calories>
  </food>
</lunch-menu>
				

Menu.xslt

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="calories">1500</xsl:param>
  <xsl:template match="/">
    <HTML>
      <BODY STYLE="font-family:Arial, helvetica, sans-serif; font-size:12pt;
            background-color:#EEEEEE">
        <xsl:for-each select="lunch-menu/food[calories <= $calories]">
          <DIV STYLE="background-color:blue; color:white; padding:4px">
            <SPAN STYLE="font-weight:bold; color:white"><xsl:value-of select="name"/></SPAN>
            - <xsl:value-of select="price"/>
          </DIV>
          <DIV STYLE="margin-left:20px; margin-bottom:1em; font-size:10pt">
            <xsl:value-of select="description"/>
            <SPAN STYLE="font-style:italic">
              (<xsl:value-of select="calories"/> calories per serving)
            </SPAN>
          </DIV>
        </xsl:for-each>
      </BODY>
    </HTML>
  </xsl:template>
</xsl:stylesheet>
				

WebForm1.aspx

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="menu.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
  <HEAD>
    <title>WebForm1</title>
    <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
    <meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
    <meta name=vs_defaultClientScript content="JavaScript">
    <meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
  </HEAD>
  <body >

    <form id="Form1" method="post" runat="server">
<P>Maximum Calories: 
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
<asp:Button id="Button1" runat="server" Text="Filter menu"></asp:Button></P>
<P>
<asp:Xml id="Xml1" runat="server" DocumentSource="menu.xml" TransformSource="menu.xslt"></asp:Xml></P>

    </form>

  </body>
</HTML>
				

Class1.cs Non-Inheritance Example

using System;
using System.Xml.Xsl;

namespace ClassLibrary1
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    public class Class1
    {
        public XsltArgumentList CreateArgumentList(
        string ParamName, string NamespaceURI, string ParamValue)
        {
            XsltArgumentList tal = new XsltArgumentList();
            tal.AddParam(ParamName, NamespaceURI, ParamValue);
            return tal;
        }
    }
}
				

WebForm1.vb Inheriting System.Web.UI.Page

Imports System.Xml.Xsl

Public Class WebForm1
    Inherits System.Web.UI.Page
    Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
    Protected WithEvents Button1 As System.Web.UI.WebControls.Button
    Protected WithEvents Xml1 As System.Web.UI.WebControls.Xml

#Region " Web Form Designer Generated Code "

    'The Web Form Designer requires this call.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: The Web Form Designer requires this method call.
        'Do not use the Code editor to modify it.
        InitializeComponent()
    End Sub

#End Region

    Private Sub Page_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
        'Insert user code to initialize the page here.
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
        Dim tal As New XsltArgumentList()
        tal.AddParam("calories", "", TextBox1.Text)
        Xml1.TransformArgumentList = tal
        Xml1.Visible = True
    End Sub
End Class
				

Class1.cs Inheritance Example

using System;
using System.Xml.Xsl;

namespace ClassLibrary1
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    public class Class1 : System.Web.UI.Page
    {
        public XsltArgumentList CreateArgumentList(
        string ParamName, string NamespaceURI, string ParamValue)
        {
            XsltArgumentList tal = new XsltArgumentList();
            tal.AddParam(ParamName, NamespaceURI, ParamValue);
            return tal;
        }
    }
}
				

WebForm1.vb Inheriting ClassLibrary1

Imports System.Xml.Xsl

Public Class WebForm1
    Inherits ClassLibrary1.Class1
    Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
    Protected WithEvents Button1 As System.Web.UI.WebControls.Button
    Protected WithEvents Xml1 As System.Web.UI.WebControls.Xml

#Region " Web Form Designer Generated Code "

    'The Web Form Designer requires this call.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: The Web Form Designer requires this method call.
        'Do not use the Code editor to modify it.
        InitializeComponent()
    End Sub

#End Region

    Private Sub Page_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
        'Insert user code to initialize the page here.
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
    Xml1.TransformArgumentList = CreateArgumentList("calories", "", TextBox1.Text)
        Xml1.Visible = True
    End Sub
End Class
				

Βεβαιωθείτε ότι λειτουργεί το

  1. Press the F5 key to run the application in debug mode.
  2. The entire menu appears by default. Take note of the calorie counts for each item.
  3. In the text box, type a number of calories, and then clickFilter Menu. Notice that only those menu items that are less than or equal to this calorie amount appear.
  4. Press the SHIFT+F5 key combination to stop debugging and to return to Visual Studio.

Steps to Demonstrate Multilanguage Inheritance

To illustrate multilanguage inheritance, you must modify the Web Application project. Instead of creating an instance of the Class Library component, the application inherits from the Visual Basic .NET Web Form code-behind class.

The code-behind class currently inherits theSystem.Web.UI.PageCLASS. Because Microsoft .NET does not support multiple inheritance, you must moveτου διαφημιζόμενου πελάτη Βclass inheritance to the Visual C# class.
  1. Προσθέστε μια αναφορά για τοSystem.Webχώρος ονομάτων στη βιβλιοθήκη κλάσης πριν να τροποποιήσετε το Visual C# κώδικα.
  2. Στο παράθυρο του Solution Explorer, στην περιοχήClassLibrary1Κάντε δεξιό κλικ στο στοιχείοΑναφορές, και στη συνέχεια κάντε κλικ στο κουμπίΠροσθήκη αναφοράς.
  3. Στο διακομιστή.NETκαρτέλα, κάντε διπλό κλικSystem.Web.dll. Προσέξτε ότιSystem.Web.dllεμφανίζεται με τοΕπιλεγμένα στοιχείαπλαίσιο λίστας.
  4. Κάντε κλικOk. Προσέξτε ότιSystem.Webεμφανίζεται στην περιοχήΑναφορέςστη βιβλιοθήκη κλάσης.
  5. Τροποποίηση τουClass1δήλωση για μεταβίβαση τουτου διαφημιζόμενου πελάτη ΒCLASS:
    public class Class1 : System.Web.UI.Page
    					
  6. Η κλάση πίσω κώδικα της Visual Basic .NET ή Visual Basic 2005 είναι τώρα έτοιμος για μεταβίβασηClass1. becauseClass1γίνεται μεταβίβαση τουτου διαφημιζόμενου πελάτη Βη κλάση, η κλάση κώδικα πίσω κληρονομεί επίσης τοτου διαφημιζόμενου πελάτη Βη κλάση μέσω της μεταβίβασης τωνClass1.

    Στο παράθυρο "Επεξεργασία", κάντε κλικ στο κουμπίWebForm1.aspx.vb. Κάτω από τη δήλωση της κλάσης, αντικατάστασηSystem.Web.UI.PageWITHClassLibrary1.Class. Το ενημερωμένο κώδικα θα πρέπει να εμφανίζεται ως εξής:
    Inherits ClassLibrary1.Class1
    					
  7. Σχόλιο από την πρώτη γραμμή τουΚάντε κλικτο πρόγραμμα χειρισμού συμβάντων ως εξής:
    'Dim myArgList As New ClassLibrary1.Class1()
    					
  8. Τροποποίηση στη δεύτερη γραμμή τουΚάντε κλικτο πρόγραμμα χειρισμού συμβάντων από την κλήσηCreateArgumentListΧωρίς αναφορά του αντικειμένου:
    Xml1.TransformArgumentList = CreateArgumentList("calories", "", TextBox1.Text)
    					
  9. Επαναλάβετε τα βήματα στοΒεβαιωθείτε ότι λειτουργεί τοΕνότητα.

ΑΝΤΙΜΕΤΩΠΙΣΗ ΠΡΟΒΛΗΜΑΤΩΝ

  • Όταν εργάζεστε με δύο γλώσσες, είναι εύκολο να συγχέετε τη σύνταξη. Το Visual C# σύνταξης δεν επιτρέπεται ένα πλάτος περιθωρίου του σφάλματος. Επιπλέον, τα μηνύματα λάθους Visual C# .NET δεν είναι πάντα ως γραμμή εντολών ή ως διαισθητική ως μηνύματα λάθους της Visual Basic .NET. Για να αντιμετωπίσετε αυτές τις δυσκολίες, ανατρέξτε στην ενότητα "Ισοδύναμα γλώσσας" από το Microsoft .NET Framework κιτ ανάπτυξης λογισμικού (SDK):
    Ισοδύναμα γλώσσας
    .aspx http://msdn2.Microsoft.com/en-us/library/czz35az4 (vs.71)
  • Εάν θέλετε να χρησιμοποιήσετε τη μεταβίβαση της υλοποίησης, μελέτης αντικειμενοστρεφείς αρχές σχεδίασης και αποφασίστε εκ των προτέρων αρχιτεκτονική εφαρμογής. Ένα κοινό λάθος είναι να τοποθετήσετε κώδικα σε μια κύρια εφαρμογή που θα πρέπει να μεταβιβαστεί σε μια βιβλιοθήκη κλάσης. Σε αυτό το σενάριο, δεν είναι δυνατή η μεταβίβαση του στην κύρια εφαρμογή σε μια βιβλιοθήκη κλάσης εξαιτίας κυκλικές εξαρτήσεις. Για παράδειγμα, προσπαθήστε να προσθέσετε μια αναφορά στο έργο μενού στο έργο ClassLibrary1. Εμφανίζεται το ακόλουθο μήνυμα λάθους:
    Δεν ήταν δυνατή η προσθήκη αναφορά σε 'Μενού'. Προσθήκη αυτού του έργου ως αναφορά θα προκαλούσε μια κυκλική εξάρτηση.

Αναφορές

Για περισσότερες πληροφορίες, ανατρέξτε στις ακόλουθες τοποθεσίες της Microsoft στο Web:
Βασικά Instincts: Χρήση της μεταβίβασης στο .NET, μέρος 1
http://MSDN.Microsoft.com/en-us/magazine/cc135806.aspx

Βασικά Instincts: Χρήση της μεταβίβασης στο .NET, μέρος 2
http://MSDN.Microsoft.com/en-us/magazine/cc301744.aspx

XML Core
http://MSDN.Microsoft.com/en-us/XML/bb291077.aspx

Στοιχείο ελέγχου διακομιστή XML Web
http://MSDN.Microsoft.com/Library/Default.asp?URL=/Library/en-us/cpgenref/HTML/gnconxmlwebservercontrol.asp

Δεδομένα XML-Νησιά
http://MSDN.Microsoft.com/Library/Default.asp?URL=/Library/en-us/comsrv2k/htm/cs_tp_bizdesk_nqok.asp

Ιδιότητες

Αναγν. άρθρου: 315903 - Τελευταία αναθεώρηση: Δευτέρα, 24 Φεβρουαρίου 2014 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual Basic 2005
Λέξεις-κλειδιά: 
kbnosurvey kbarchive kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB315903 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:315903

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com