Flex Загрузить XML в сетку данных / базу данных - PullRequest
0 голосов
/ 22 октября 2010

В нашем проекте есть требование просмотреть и загрузить файл XML и показать его на сетке данных, отредактировать сетку и затем сохранить содержимое в базе данных. Я могу видеть примеры, которые берут XML из определенной папки и показывают в сетке данных, но не в состоянии видеть какие-либо примеры, которые просматривают XML и затем загружают его. Было бы замечательно, если бы кто-то мог указать мне на примеры или некоторый пример кода. Наш XML выглядит так:

<VisitImportList>
    <Visit>
        <AuditDetails>
            <UpdateUser>ADMIN</UpdateUser>
            <UpdateTimestamp>2010-10-22T16:25:26.593Z</UpdateTimestamp>
        </AuditDetails>
        <VisitId>3</VisitId>
        <MeasurementCollectionId>4</MeasurementCollectionId>
        <WeightConfirmationCode>5</WeightConfirmationCode>
        <PrefilledIndicator>true</PrefilledIndicator>
        <VisitDate>2010-10-22T16:25:26.593Z</VisitDate>     
    </Visit>
    <Visit>
        <AuditDetails>
            <UpdateUser>ADMIN</UpdateUser>
            <UpdateTimestamp>2010-10-22T16:25:26.593Z</UpdateTimestamp>
        </AuditDetails>
        <VisitId>3</VisitId>
        <MeasurementCollectionId>3</MeasurementCollectionId>
        <BloodPressureConfirmationCode>4</BloodPressureConfirmationCode>
        <PrefilledIndicator>true</PrefilledIndicator>
        <VisitInvalidCode>1</VisitInvalidCode>
        <VisitInvalidReasonText>No Dates</VisitInvalidReasonText>
    </Visit>
</VisitImportList>

Хорошо. Я смог показать данные в сетке, используя FileReference для загрузки и XML / XMLListCollection. Теперь проблема в том, когда я пытаюсь сохранить в базу данных. Я не хотел создавать новую тему, поэтому добавил свой вопрос здесь:

private function saveVisit(event:MouseEvent): void
            {
var decoder:SimpleXMLDecoder = new SimpleXMLDecoder();
                var data:Object = decoder.decodeXML(xmlDoc);

                var array:Array = ArrayUtil.toArray(data.VisitImportList.Visit);
                tempCollection = new ArrayCollection(array);

Теперь у меня есть данные в моей коллекции массивов (tempCollection). Но он содержит общие объекты, и мне нужно преобразовать их в объект посещений. Поэтому я хочу пройтись по ArrayCollection, преобразовать объект в определенные пользовательские объекты Visit и затем добавить их в другую коллекцию (я уверен, что это неправильный способ, но я не могу придумать заместитель):

     for (var i:int = 0; i < tempCollection.length; ++i) 
                        {               
                            model.visit = new Visit();  
                            model.visit = Visit(tempCollection.getItemAt(i, 0)); // This line gives the error Type Coercion failed: cannot convert Object@1d4e4719 to com.model.Visit.
                            model.visit = tempCollection.getItemAt(i) as Visit; // This line always has Visit as null eventhough the tempCollection has 2 objects

model.pvList.visits.addItemAt(Visit, i);
}

Так может кто-нибудь помочь с тем, как перебрать ArraCollection и преобразовать объект AS в пользовательский объект Visit, а затем добавить в другой ArrayCollection ИЛИ более простой способ сделать это

Спасибо

Хариш

1 Ответ

1 голос
/ 25 октября 2010

Если вы работаете с приложением AIR, вы можете легко получить доступ к ресурсам на вашем компьютере, используя объекты File и FileStream во Flex.

http://livedocs.adobe.com/flex/3/html/help.html?content=Filesystem_16.html

Получите объект XML и затем преобразуйте его в XMLListCollection из его команды элемента, т.е.

var xmlProvider:XMLListCollection = new XMLListCollection(xml.Visit);

Установите для этого провайдера свою сетку данных и напишите сценарий для загрузки и сохранения этих данных так, как вы хотите.

Но вместо этого, если вы пишете веб-приложение. Вы не можете получить доступ к ресурсам, которые не находятся в пути ваших временных файлов Flex на вашем клиенте. Или вы должны предоставить гибкий доступ к папке / файлу на клиентском компьютере, используя « Глобальные параметры безопасности ». В этом случае должен работать тот же API-интерфейс AIR.

Однако, если вы этого не хотите, то, очевидно, вам нужно загрузить файл на сервер, прочитать этот объект с помощью HTTPService обратно на клиенте, создать объект XMLListCollection и загрузить данные в DataGrid. Это поможет

  1. Загрузить файл
  2. Служба HTTP + образец DataGrid для файла XML на сервере
...